From 3036c94198d039e1ebc76c43928f3619d670172f Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Tue, 7 Aug 2018 15:18:42 +0200 Subject: [PATCH 001/798] Add new situation retained warranty field --- htdocs/admin/facture_situation.php | 181 ++++++++++++++++++ htdocs/compta/facture/class/facture.class.php | 18 +- htdocs/core/lib/invoice.lib.php | 9 +- .../install/mysql/migration/8.0.0-9.0.0.sql | 5 + htdocs/install/mysql/tables/llx_facture.sql | 2 + htdocs/langs/en_US/bills.lang | 4 + 6 files changed, 215 insertions(+), 4 deletions(-) create mode 100644 htdocs/admin/facture_situation.php diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php new file mode 100644 index 00000000000..cfee53da5f5 --- /dev/null +++ b/htdocs/admin/facture_situation.php @@ -0,0 +1,181 @@ + + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2005 Eric Seigne + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2008 Raphael Bertrand (Resultic) + * Copyright (C) 2012-2013 Juanjo Menent + * Copyright (C) 2014 Teddy Andreotti <125155@supinfo.com> + * + * 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/facture.php + * \ingroup facture + * \brief Page to setup invoice module + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('admin', 'errors', 'other', 'bills')); + +if (! $user->admin) accessforbidden(); + +$action = GETPOST('action','alpha'); +$value = GETPOST('value','alpha'); +$label = GETPOST('label','alpha'); +$scandir = GETPOST('scan_dir','alpha'); +$type='invoice'; + + +/* + * Actions + */ + +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; + + + +/* + * View + */ + +$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); + +llxHeader("",$langs->trans("BillsSetup"),'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); + +$form=new Form($db); + + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); + +$head = invoice_admin_prepare_head(); +dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoice'); + +/* + * Numbering module + */ + +print load_fiche_titre($langs->trans("InvoiceSituation"),'',''); +$var=0; +print ''; + + +_print_on_off('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); +_print_on_off('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); +_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARANTY',$langs->trans('Retainedwarranty')); + +$metas = array( + 'type' => 'number', + 'step' => '0.01', + 'min' => 0, + 'max' => 100 +); +_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); + + + + +dol_fiche_end(); + +// End of page +llxFooter(); +$db->close(); + +function _print_on_off($confkey, $title = false, $desc ='') +{ + global $var, $bc, $langs, $conf; + $var=!$var; + + print ''; + print ''; + print ''; + print ''; +} + + +function _print_input_form_part($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) +{ + global $var, $bc, $langs, $conf, $db; + $var=!$var; + + $form=new Form($db); + + $defaultMetas = array( + 'name' => $confkey + ); + + if($type!='textarea'){ + $defaultMetas['type'] = 'text'; + $defaultMetas['value'] = $conf->global->{$confkey}; + } + + + $metas = array_merge ($defaultMetas, $metas); + $metascompil = ''; + foreach ($metas as $key => $values) + { + $metascompil .= ' '.$key.'="'.$values.'" '; + } + + print ''; + print ''; + print ''; + print ''; +} diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 4edce36b82f..418339a0383 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -160,6 +160,9 @@ class Facture extends CommonInvoice public $tab_next_situation_invoice=array(); public $oldcopy; + + + public $retained_waranty; /** * Standard invoice @@ -339,6 +342,8 @@ class Facture extends CommonInvoice $this->note_public=trim($this->note_public); $this->note_private=trim($this->note_private); $this->note_private=dol_concatdesc($this->note_private, $langs->trans("GeneratedFromRecurringInvoice", $_facrec->ref)); + + $this->retained_waranty = floatval($this->retained_waranty); $this->array_options=$_facrec->array_options; @@ -426,6 +431,7 @@ class Facture extends CommonInvoice $sql.= ", fk_multicurrency"; $sql.= ", multicurrency_code"; $sql.= ", multicurrency_tx"; + $sql.= ", retained_waranty"; $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; @@ -458,6 +464,8 @@ class Facture extends CommonInvoice $sql.= ", ".(int) $this->fk_multicurrency; $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; + $sql.= ", ".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); + $sql.=")"; $resql=$this->db->query($sql); @@ -1276,6 +1284,7 @@ class Facture extends CommonInvoice $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', f.fk_incoterms, f.location_incoterms'; $sql.= ", i.libelle as libelle_incoterms"; + $sql.= ", f.retained_waranty as retained_waranty"; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as c ON f.fk_cond_reglement = c.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON f.fk_mode_reglement = p.id'; @@ -1343,9 +1352,9 @@ class Facture extends CommonInvoice $this->situation_cycle_ref = $obj->situation_cycle_ref; $this->situation_counter = $obj->situation_counter; $this->situation_final = $obj->situation_final; + $this->retained_waranty = $obj->retained_waranty; $this->extraparams = (array) json_decode($obj->extraparams, true); - - //Incoterms + // Incoterms $this->fk_incoterms = $obj->fk_incoterms; $this->location_incoterms = $obj->location_incoterms; $this->libelle_incoterms = $obj->libelle_incoterms; @@ -1569,7 +1578,9 @@ class Facture extends CommonInvoice if (isset($this->note_public)) $this->note_public=trim($this->note_public); if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf); if (isset($this->import_key)) $this->import_key=trim($this->import_key); - + if (isset($this->retained_waranty)) $this->retained_waranty = floatval($this->retained_waranty); + + // Check parameters // Put here code to add control on parameters values @@ -1610,6 +1621,7 @@ class Facture extends CommonInvoice $sql.= " situation_cycle_ref=".(empty($this->situation_cycle_ref)?"null":$this->db->escape($this->situation_cycle_ref)).","; $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)); + $sql.= " retained_waranty=".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); $sql.= " WHERE rowid=".$this->id; $this->db->begin(); diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 4e7fa860529..c4ecbacf6e7 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -136,7 +136,14 @@ function invoice_admin_prepare_head() $head[$h][1] = $langs->trans("Payments"); $head[$h][2] = 'payment'; $h++; - + + if($conf->global->INVOICE_USE_SITUATION){ + $head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php'; + $head[$h][1] = $langs->trans("InvoiceSituation"); + $head[$h][2] = 'situation'; + $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 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 be072b8bacb..2a429fc7765 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 @@ -50,3 +50,8 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204); ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after amount; + +ALTER TABLE llx_facture ADD COLUMN retained_waranty real DEFAULT NULL after situation_final; + + + diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index c0783a7bbd8..decd48f46bc 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -86,6 +86,8 @@ create table llx_facture situation_counter smallint, -- situation counter situation_final smallint, -- is the situation final ? + retained_waranty real DEFAULT NULL, -- % of retained warranty + import_key varchar(14), extraparams varchar(255), -- for other parameters with json format diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 54194358748..94f0786343e 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -211,6 +211,10 @@ ShowInvoiceReplace=Show replacing invoice ShowInvoiceAvoir=Show credit note ShowInvoiceDeposit=Show down payment invoice ShowInvoiceSituation=Show situation invoice +UseSituationInvoices=Allow situation invoice +UseSituationInvoicesCreditNote=Allow situation invoice credit note +Retainedwarranty=Retained warranty +RetainedwarrantyDefaultPercent=Retained warranty default percent ShowPayment=Show payment AlreadyPaid=Already paid AlreadyPaidBack=Already paid back From 06be98c63855797f67508dec6177795e2cf5b177 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Wed, 8 Aug 2018 17:36:39 +0200 Subject: [PATCH 002/798] add date field --- htdocs/admin/facture_situation.php | 4 +- htdocs/compta/facture/card.php | 96 ++++++++++++++++ htdocs/compta/facture/class/facture.class.php | 104 ++++++++++++++++-- .../install/mysql/migration/8.0.0-9.0.0.sql | 4 +- htdocs/install/mysql/tables/llx_facture.sql | 3 +- htdocs/langs/en_US/bills.lang | 2 + 6 files changed, 199 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index cfee53da5f5..ad6f858df20 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -81,7 +81,7 @@ print '
'.($title?$title:$langs->trans($confkey)); + if(!empty($desc)) + { + print '
'.$langs->trans($desc).''; + } + print '
 '; + print '
'; + print ''; + print ''; + print ajax_constantonoff($confkey); + print '
'; + print '
'; + + if(!empty($help)){ + print $form->textwithtooltip( ($title?$title:$langs->trans($confkey)) , $langs->trans($help),2,1,img_help(1,'')); + } + else { + print $title?$title:$langs->trans($confkey); + } + + if(!empty($desc)) + { + print '
'.$langs->trans($desc).''; + } + + print '
 '; + print '
'; + print ''; + print ''; + if($type=='textarea'){ + print ''; + } + else { + print ''; + } + + print ''; + print '
'; + print '
'; _print_on_off('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); _print_on_off('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); -_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARANTY',$langs->trans('Retainedwarranty')); +_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); $metas = array( 'type' => 'number', @@ -89,7 +89,7 @@ $metas = array( 'min' => 0, 'max' => 100 ); -_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); +_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index e411f8c5b1b..6415ef4cdcd 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -288,6 +288,23 @@ if (empty($reshook)) if ($result < 0) dol_print_error($db, $object->error); } + + else if ($action == 'setretainedwarranty' && $user->rights->facture->creer) + { + $object->fetch($id); + $result = $object->setRetainedWarranty(GETPOST('retained_warranty', 'float')); + if ($result < 0) + dol_print_error($db, $object->error); + } + + else if ($action == 'setretainedwarrantydatelimit' && $user->rights->facture->creer) + { + $object->fetch($id); + $result = $object->setRetainedWarrantyDateLimit(GETPOST('retained_warranty_date_limit', 'float')); + if ($result < 0) + dol_print_error($db, $object->error); + } + // Multicurrency Code else if ($action == 'setmulticurrencycode' && $user->rights->facture->creer) { @@ -1152,6 +1169,7 @@ if (empty($reshook)) $object->situation_counter = 1; $object->situation_final = 0; $object->situation_cycle_ref = $object->newCycle(); + $object->retained_warranty = !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)?$conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY:0; } $object->fetch_thirdparty(); @@ -3919,6 +3937,70 @@ else if ($id > 0 || ! empty($ref)) print ''; } + + if($object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) + { + // Retained Warranty + print ''; + + + // Retained Warranty payment date limit + print ''; + } + + // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; @@ -4360,6 +4442,20 @@ else if ($id > 0 || ! empty($ref)) // Billed print ''; + if(!empty($object->retained_warranty)){ + // Billed - retained warranty + $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; + $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; + print ''; + + // retained warranty + print ''; + + } + // Remainder to pay print ''; print ''; print ''; - print ''; } function _print_input_form_part($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) { - global $var, $bc, $langs, $conf, $db; + global $var, $bc, $langs, $conf, $db, $inputCount; $var=!$var; - + $inputCount = empty($inputCount)?1:($inputCount+1); $form=new Form($db); $defaultMetas = array( - 'name' => $confkey + 'name' => 'value'.$inputCount ); if($type!='textarea'){ @@ -165,17 +190,14 @@ function _print_input_form_part($confkey, $title = false, $desc ='', $metas = ar print ''; print ''; print ''; } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 6415ef4cdcd..c9e14304954 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -289,6 +289,21 @@ if (empty($reshook)) dol_print_error($db, $object->error); } + else if ($action == 'setretainedwarrantyconditions' && $user->rights->facture->creer) + { + $object->fetch($id); + $object->retained_warranty_fk_cond_reglement = 0; // To clean property + $result = $object->setRetainedWarrantyPaymentTerms(GETPOST('retained_warranty_fk_cond_reglement', 'int')); + if ($result < 0) dol_print_error($db, $object->error); + + $old_rw_date_lim_reglement = $object->retained_warranty_date_limit; + $new_rw_date_lim_reglement = $object->calculate_date_lim_reglement($object->retained_warranty_fk_cond_reglement); + if ($new_rw_date_lim_reglement > $old_rw_date_lim_reglement) $object->retained_warranty_date_limit = $new_rw_date_lim_reglement; + if ($object->retained_warranty_date_limit < $object->date) $object->retained_warranty_date_limit = $object->date; + $result = $object->update($user); + if ($result < 0) dol_print_error($db, $object->error); + } + else if ($action == 'setretainedwarranty' && $user->rights->facture->creer) { $object->fetch($id); @@ -877,7 +892,7 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - + // Proprietes particulieres a facture de remplacement $object->fk_facture_source = $_POST['fac_replacement']; $object->type = Facture::TYPE_REPLACEMENT; @@ -1163,13 +1178,25 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); + + + if (GETPOST('type') == Facture::TYPE_SITUATION) { $object->situation_counter = 1; $object->situation_final = 0; $object->situation_cycle_ref = $object->newCycle(); - $object->retained_warranty = !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)?$conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY:0; + + + $object->retained_warranty = GETPOST('retained_warranty', 'int'); + $object->retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); + + $retained_warranty_date_limit = GETPOST('retained_warranty_date_limit'); + if(!empty($retained_warranty_date_limit) && $db->jdate($retained_warranty_date_limit)){ + $object->retained_warranty_date_limit = $db->jdate($retained_warranty_date_limit); + } + $object->retained_warranty_date_limit = !empty($object->retained_warranty_date_limit) ? $object->retained_warranty_date_limit : $object->calculate_date_lim_reglement($object->retained_warranty_fk_cond_reglement); } $object->fetch_thirdparty(); @@ -1583,7 +1610,7 @@ if (empty($reshook)) $object->mode_reglement_id = GETPOST('mode_reglement_id','int'); $object->remise_absolue = GETPOST('remise_absolue','int'); $object->remise_percent = GETPOST('remise_percent','int'); - + // Proprietes particulieres a facture de remplacement $object->situation_counter = $object->situation_counter + 1; @@ -3082,6 +3109,44 @@ if ($action == 'create') print ''; + + if (! empty($conf->global->INVOICE_USE_SITUATION)) + { + if($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY){ + + $rwStyle = 'display:none;'; + if(GETPOST('type', 'int') == Facture::TYPE_SITUATION){ + $rwStyle = ''; + } + + + $retained_warranty = GETPOST('retained_warranty', 'int'); + $retained_warranty = !empty($retained_warranty)?$retained_warranty:$conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT; + print ''; + + print ''; + } + } // Payment mode print ''; } - - if($object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) + $displayWarranty = false; + if( !empty($object->situation_final) + && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) + ) { + // Check if this situation invoice is 100% for real + if(!empty($object->lines)){ + $displayWarranty = true; + foreach( $object->lines as $i => $line ){ + if($line->product_type < 2 && $line->situation_percent < 100){ + $displayWarranty = false; + break; + } + } + } + + + // Retained Warranty - print ''; @@ -1075,7 +1075,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index fe017a6b1aa..a960c703eba 100644 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -548,7 +548,7 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error) '; $filename=dol_sanitizeFileName($objp->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($objp->ref); + $filedir=$conf->commande->multidir_output[$objp->entity] . '/' . dol_sanitizeFileName($objp->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$objp->rowid; print $formfile->getDocumentsLink($generic_commande->element, $filename, $filedir); print '
'; + print ''; + if ($action != 'editretainedwarranty' && $user->rights->facture->creer){ + print ''; + } + + print '
'; + print $langs->trans('RetainedWarranty'); + print 'id . '">' . img_edit($langs->trans('setretainedwarranty'), 1) . '
'; + print '
'; + if ($action == 'editretainedwarranty') + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + else + { + print price($object->retained_warranty).'%'; + } + print '
'; + print ''; + if ($action != 'editretainedwarrantydatelimit' && $user->rights->facture->creer){ + print ''; + } + + print '
'; + print $langs->trans('RetainedWarrantyDateLimit'); + print 'id . '">' . img_edit($langs->trans('setretainedwarrantyDateLimit'), 1) . '
'; + print '
'; + $defaultDate = !empty($object->retained_warranty_date_limit)?$object->retained_warranty_date_limit:strtotime('-1 years', $object->date_lim_reglement); + if($object->date > $defaultDate){ + $defaultDate = $object->date; + } + + if ($action == 'editretainedwarrantydatelimit') + { + //date('Y-m-d',$object->date_lim_reglement) + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + else + { + print dol_print_date($defaultDate); + } + print '
' . $langs->trans("Billed") . ' :' . price($object->total_ttc) . ' 
' . $langs->trans("ToPayOn", dol_print_date($object->date_lim_reglement)) . ' :' . price($billedWithRetainedWarranty) . ' 
'; + print $langs->trans("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; + print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit)):''; + print ' :' . price($retainedWarranty) . ' 
'; if ($resteapayeraffiche >= 0) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 418339a0383..9c387f6630a 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -162,7 +162,9 @@ class Facture extends CommonInvoice public $oldcopy; - public $retained_waranty; + public $retained_warranty; + + public $retained_warranty_date_limit; /** * Standard invoice @@ -343,7 +345,7 @@ class Facture extends CommonInvoice $this->note_private=trim($this->note_private); $this->note_private=dol_concatdesc($this->note_private, $langs->trans("GeneratedFromRecurringInvoice", $_facrec->ref)); - $this->retained_waranty = floatval($this->retained_waranty); + $this->retained_warranty = floatval($this->retained_warranty); $this->array_options=$_facrec->array_options; @@ -431,7 +433,8 @@ class Facture extends CommonInvoice $sql.= ", fk_multicurrency"; $sql.= ", multicurrency_code"; $sql.= ", multicurrency_tx"; - $sql.= ", retained_waranty"; + $sql.= ", retained_warranty"; + $sql.= ", retained_warranty_date_limit"; $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; @@ -464,7 +467,8 @@ class Facture extends CommonInvoice $sql.= ", ".(int) $this->fk_multicurrency; $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; - $sql.= ", ".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); + $sql.= ", ".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)); + $sql.= ", '".$this->db->idate($this->retained_warranty_date_limit)."'"; $sql.=")"; @@ -1284,7 +1288,7 @@ class Facture extends CommonInvoice $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', f.fk_incoterms, f.location_incoterms'; $sql.= ", i.libelle as libelle_incoterms"; - $sql.= ", f.retained_waranty as retained_waranty"; + $sql.= ", f.retained_warranty as retained_warranty, f.retained_warranty_date_limit as retained_warranty_date_limit"; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as c ON f.fk_cond_reglement = c.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON f.fk_mode_reglement = p.id'; @@ -1352,7 +1356,9 @@ class Facture extends CommonInvoice $this->situation_cycle_ref = $obj->situation_cycle_ref; $this->situation_counter = $obj->situation_counter; $this->situation_final = $obj->situation_final; - $this->retained_waranty = $obj->retained_waranty; + $this->retained_warranty = $obj->retained_warranty; + $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); + $this->extraparams = (array) json_decode($obj->extraparams, true); // Incoterms $this->fk_incoterms = $obj->fk_incoterms; @@ -1578,7 +1584,7 @@ class Facture extends CommonInvoice if (isset($this->note_public)) $this->note_public=trim($this->note_public); if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf); if (isset($this->import_key)) $this->import_key=trim($this->import_key); - if (isset($this->retained_waranty)) $this->retained_waranty = floatval($this->retained_waranty); + if (isset($this->retained_warranty)) $this->retained_warranty = floatval($this->retained_warranty); // Check parameters @@ -1620,8 +1626,9 @@ class Facture extends CommonInvoice $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").","; $sql.= " situation_cycle_ref=".(empty($this->situation_cycle_ref)?"null":$this->db->escape($this->situation_cycle_ref)).","; $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; - $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)); - $sql.= " retained_waranty=".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); + $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)).","; + $sql.= " retained_warranty=".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)).","; + $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null'); $sql.= " WHERE rowid=".$this->id; $this->db->begin(); @@ -4226,6 +4233,85 @@ class Facture extends CommonInvoice return $this->date_lim_reglement < ($now - $conf->facture->client->warning_delay); } + + + /** + * Change the retained warranty + * + * @param float $value value of retained warranty + * @return int >0 if OK, <0 if KO + */ + function setRetainedWarranty($value) + { + dol_syslog(get_class($this).'::setRetainedWarranty('.$value.')'); + if ($this->statut >= 0) + { + $fieldname = 'retained_warranty'; + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; + $sql .= ' SET '.$fieldname.' = '.floatval($value); + $sql .= ' WHERE rowid='.$this->id; + + if ($this->db->query($sql)) + { + $this->retained_warranty = floatval($value); + return 1; + } + else + { + dol_syslog(get_class($this).'::setRetainedWarranty Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog(get_class($this).'::setRetainedWarranty, status of the object is incompatible'); + $this->error='Status of the object is incompatible '.$this->statut; + return -2; + } + } + + + /** + * Change the retained_warranty_date_limit + * + * @param timestamp $value value of retained warranty + * @return int >0 if OK, <0 if KO + */ + function setRetainedWarrantyDateLimit($timestamp,$dateYmd=false) + { + if(!$timestamp && $dateYmd){ + $timestamp = $this->db->jdate($dateYmd); + } + + + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$value.')'); + if ($this->statut >= 0) + { + $fieldname = 'retained_warranty_date_limit'; + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; + $sql .= ' SET '.$fieldname.' = '.(strval($timestamp)!='' ? '\'' .$this->db->idate($timestamp).'\'' : 'null' ); + $sql .= ' WHERE rowid='.$this->id; + + if ($this->db->query($sql)) + { + $this->retained_warranty_date_limit = $timestamp; + return 1; + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit, status of the object is incompatible'); + $this->error='Status of the object is incompatible '.$this->statut; + return -2; + } + } } /** 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 2a429fc7765..fb7db220138 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 @@ -51,7 +51,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after amount; -ALTER TABLE llx_facture ADD COLUMN retained_waranty real DEFAULT NULL after situation_final; - +ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; +ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index decd48f46bc..abdefedc944 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -86,7 +86,8 @@ create table llx_facture situation_counter smallint, -- situation counter situation_final smallint, -- is the situation final ? - retained_waranty real DEFAULT NULL, -- % of retained warranty + retained_warranty real DEFAULT NULL, -- % of retained warranty + retained_warranty_date_limit date DEFAULT NULL, import_key varchar(14), extraparams varchar(255), -- for other parameters with json format diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 94f0786343e..c547f385be0 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -550,3 +550,5 @@ 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 +ToPayOn=To pay on %s +RetainedWarranty=Retained Warranty From d6d8f98f38f01930958654f6d720f478c60c88b5 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 10 Aug 2018 15:06:00 +0200 Subject: [PATCH 003/798] add retained warranty cond field and add forms --- htdocs/admin/facture_situation.php | 54 ++++-- htdocs/compta/facture/card.php | 169 +++++++++++++++--- htdocs/compta/facture/class/facture.class.php | 23 ++- htdocs/core/class/commonobject.class.php | 37 ++++ .../install/mysql/migration/8.0.0-9.0.0.sql | 1 + htdocs/install/mysql/tables/llx_facture.sql | 5 +- htdocs/langs/en_US/bills.lang | 7 + 7 files changed, 248 insertions(+), 48 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index ad6f858df20..dc3ec771b16 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -76,6 +76,12 @@ dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoi print load_fiche_titre($langs->trans("InvoiceSituation"),'',''); $var=0; + +print '
'; +print ''; + +_updateBtn(); + print ''; @@ -94,17 +100,40 @@ _print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$la +// Conditions paiements +$inputCount = empty($inputCount)?1:($inputCount+1); +print ''; +print ''; +print ''; +print ''; + + +print '
'.$langs->trans('PaymentConditionsShortRetainedWarranty').' '; +print ''; +$form->select_conditions_paiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'value'.$inputCount, -1, 1); +print '
'; + +_updateBtn(); + +print '
'; + dol_fiche_end(); // End of page llxFooter(); $db->close(); +function _updateBtn(){ + global $langs; + print '
'; + print ''; + print '
'; +} + function _print_on_off($confkey, $title = false, $desc ='') { - global $var, $bc, $langs, $conf; + global $var, $bc, $langs; $var=!$var; - print '
'.($title?$title:$langs->trans($confkey)); if(!empty($desc)) @@ -113,25 +142,21 @@ function _print_on_off($confkey, $title = false, $desc ='') } print ' '; - print '
'; - print ''; - print ''; + print '
'; print ajax_constantonoff($confkey); - print ''; print '
 '; - print '
'; - print ''; - print ''; + print ''; + + print ''; if($type=='textarea'){ print ''; } else { print ''; } - - print ''; - print '
'; print '
' . $langs->trans('PaymentConditionsShort') . ''; $form->select_conditions_paiements(isset($_POST['cond_reglement_id']) ? $_POST['cond_reglement_id'] : $cond_reglement_id, 'cond_reglement_id'); print '
' . $langs->trans('RetainedWarranty') . ''; + print '%'; + + // Retained warranty payment term + print '
' . $langs->trans('PaymentConditionsShortRetainedWarranty') . ''; + $retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); + $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID; + $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement'); + print '
' . $langs->trans('PaymentMode') . ''; @@ -3937,12 +4002,27 @@ else if ($id > 0 || ! empty($ref)) print '
'; - print '
'; + print '
'; + print ''; if ($action != 'editretainedwarranty' && $user->rights->facture->creer){ @@ -3953,7 +4033,7 @@ else if ($id > 0 || ! empty($ref)) print ''; - - // Retained Warranty payment date limit - print '
'; print $langs->trans('RetainedWarranty'); print ''; if ($action == 'editretainedwarranty') { - print '
'; + print ''; print ''; print ''; print ''; @@ -3966,14 +4046,13 @@ else if ($id > 0 || ! empty($ref)) } print '
'; - print ''; + + + + + if($displayWarranty) + { + // Retained Warranty payment date limit + print ''; + } + } @@ -4442,16 +4566,17 @@ else if ($id > 0 || ! empty($ref)) // Billed print ''; - if(!empty($object->retained_warranty)){ + // Retained warranty : usualy use on construction industry + if(!empty($object->situation_final) && !empty($object->retained_warranty) && $displayWarranty){ // Billed - retained warranty $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; - print ''; + print ''; // retained warranty print ''; } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 9c387f6630a..e108b526576 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -165,6 +165,8 @@ class Facture extends CommonInvoice public $retained_warranty; public $retained_warranty_date_limit; + + public $retained_warranty_fk_cond_reglement; /** * Standard invoice @@ -345,8 +347,8 @@ class Facture extends CommonInvoice $this->note_private=trim($this->note_private); $this->note_private=dol_concatdesc($this->note_private, $langs->trans("GeneratedFromRecurringInvoice", $_facrec->ref)); - $this->retained_warranty = floatval($this->retained_warranty); + $this->array_options=$_facrec->array_options; //if (! $this->remise) $this->remise = 0; @@ -356,6 +358,7 @@ class Facture extends CommonInvoice $this->linked_objects = $_facrec->linkedObjectsIds; $forceduedate = $this->calculate_date_lim_reglement(); + // For recurring invoices, update date and number of last generation of recurring template invoice, before inserting new invoice if ($_facrec->frequency > 0) @@ -407,7 +410,7 @@ class Facture extends CommonInvoice // Define due date if not already defined $datelim=(empty($forceduedate)?$this->calculate_date_lim_reglement():$forceduedate); - + // Insert into database $socid = $this->socid; @@ -435,6 +438,7 @@ class Facture extends CommonInvoice $sql.= ", multicurrency_tx"; $sql.= ", retained_warranty"; $sql.= ", retained_warranty_date_limit"; + $sql.= ", retained_warranty_fk_cond_reglement"; $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; @@ -468,10 +472,11 @@ class Facture extends CommonInvoice $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; $sql.= ", ".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)); - $sql.= ", '".$this->db->idate($this->retained_warranty_date_limit)."'"; + $sql.= ", ".(!empty($this->retained_warranty_date_limit)?"'".$this->db->idate($this->retained_warranty_date_limit)."'":'NULL'); + $sql.= ", ".(int) $this->retained_warranty_fk_cond_reglement; $sql.=")"; - + $resql=$this->db->query($sql); if ($resql) { @@ -1288,7 +1293,7 @@ class Facture extends CommonInvoice $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', f.fk_incoterms, f.location_incoterms'; $sql.= ", i.libelle as libelle_incoterms"; - $sql.= ", f.retained_warranty as retained_warranty, f.retained_warranty_date_limit as retained_warranty_date_limit"; + $sql.= ", f.retained_warranty as retained_warranty, f.retained_warranty_date_limit as retained_warranty_date_limit, f.retained_warranty_fk_cond_reglement as retained_warranty_fk_cond_reglement"; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as c ON f.fk_cond_reglement = c.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON f.fk_mode_reglement = p.id'; @@ -1356,8 +1361,9 @@ class Facture extends CommonInvoice $this->situation_cycle_ref = $obj->situation_cycle_ref; $this->situation_counter = $obj->situation_counter; $this->situation_final = $obj->situation_final; - $this->retained_warranty = $obj->retained_warranty; - $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); + $this->retained_warranty = $obj->retained_warranty; + $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); + $this->retained_warranty_fk_cond_reglement = $obj->retained_warranty_fk_cond_reglement; $this->extraparams = (array) json_decode($obj->extraparams, true); // Incoterms @@ -1628,7 +1634,8 @@ class Facture extends CommonInvoice $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)).","; $sql.= " retained_warranty=".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)).","; - $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null'); + $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null').","; + $sql.= " retained_warranty_fk_cond_reglement=".(isset($this->retained_warranty_fk_cond_reglement)?intval($this->retained_warranty_fk_cond_reglement):"null"); $sql.= " WHERE rowid=".$this->id; $this->db->begin(); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5e528f6a1d0..37f61e01f32 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1906,6 +1906,43 @@ abstract class CommonObject return -2; } } + + /** + * Change the retained warranty payments terms + * + * @param int $id Id of new payment terms + * @return int >0 if OK, <0 if KO + */ + function setRetainedWarrantyPaymentTerms($id) + { + dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms('.$id.')'); + if ($this->statut >= 0 || $this->element == 'societe') + { + $fieldname = 'retained_warranty_fk_cond_reglement'; + + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; + $sql .= ' SET '.$fieldname.' = '.$id; + $sql .= ' WHERE rowid='.$this->id; + + if ($this->db->query($sql)) + { + $this->retained_warranty_fk_cond_reglement = $id; + return 1; + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms, status of the object is incompatible'); + $this->error='Status of the object is incompatible '.$this->statut; + return -2; + } + } /** * Define delivery address 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 fb7db220138..3eb266d3559 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 @@ -53,5 +53,6 @@ ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after a ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; +ALTER TABLE llx_facture ADD COLUMN retained_warranty_fk_cond_reglement integer DEFAULT NULL after retained_warranty_date_limit; diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index abdefedc944..f18ec0f521c 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -86,8 +86,9 @@ create table llx_facture situation_counter smallint, -- situation counter situation_final smallint, -- is the situation final ? - retained_warranty real DEFAULT NULL, -- % of retained warranty - retained_warranty_date_limit date DEFAULT NULL, + retained_warranty real DEFAULT NULL, -- % of retained warranty + retained_warranty_date_limit date DEFAULT NULL, + retained_warranty_fk_cond_reglement integer DEFAULT NULL, -- payment condition of retained warranty import_key varchar(14), extraparams varchar(255), -- for other parameters with json format diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index c547f385be0..c9f966b2e2a 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -552,3 +552,10 @@ AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached ToPayOn=To pay on %s RetainedWarranty=Retained Warranty +PaymentConditionsShortRetainedWarranty=Retained warranty payment terms +DefaultPaymentConditionsRetainedWarranty=Default retained warranty payment terms +setPaymentConditionsShortRetainedWarranty=Set retained warranty payment terms +setretainedwarranty=Set retained warranty +setretainedwarrantyDateLimit=Set retained warranty date limit +RetainedWarrantyDateLimit=Retained warranty date limit +RetainedWarrantyNeed100Percent=The situation invoice need to be at 100%% progress to be displayed on PDF From 6fad0ea5bd07307efb56573714b377db3bde61a9 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 10 Aug 2018 16:03:39 +0200 Subject: [PATCH 004/798] Add retained warranty to pdf --- htdocs/compta/facture/card.php | 2 +- .../modules/facture/doc/pdf_crabe.modules.php | 43 +++++++++++++++++++ htdocs/langs/en_US/bills.lang | 1 + 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index c9e14304954..b1d1116e54c 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4079,7 +4079,7 @@ else if ($id > 0 || ! empty($ref)) { print $form->form_conditions_reglement($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $object->retained_warranty_fk_cond_reglement, 'none'); if(!$displayWarranty){ - print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')); + print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle" '); } } print ''; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index ba52759ea35..ad650aca9b4 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1331,6 +1331,49 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($sign * $total_ttc, 0, $outputlangs), $useborder, 'R', 1); + + // Retained warranty + if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) + { + // Check if this situation invoice is 100% for real + if(!empty($object->lines)){ + $displayWarranty = true; + foreach( $object->lines as $i => $line ){ + if($line->product_type < 2 && $line->situation_percent < 100){ + $displayWarranty = false; + break; + } + } + } + + if($displayWarranty){ + $pdf->SetTextColor(40,40,40); + $pdf->SetFillColor(255,255,255); + + $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; + $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; + + // Billed - retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("ToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + + // retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $retainedWarrantyToPayOn = $outputlangs->transnoentities("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; + $retainedWarrantyToPayOn.= !empty($object->retained_warranty_date_limit)?' '.$outputlangs->transnoentities("toPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; + + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + } + } + } } diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index c9f966b2e2a..95c1a87172a 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -551,6 +551,7 @@ AutoFillDateTo=Set end date for service line with next invoice date AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached ToPayOn=To pay on %s +toPayOn=to pay on %s RetainedWarranty=Retained Warranty PaymentConditionsShortRetainedWarranty=Retained warranty payment terms DefaultPaymentConditionsRetainedWarranty=Default retained warranty payment terms From 681ae88e97b8b3155ccdf7ffbd5072a63961314e Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 10 Aug 2018 16:59:22 +0200 Subject: [PATCH 005/798] fix display cond --- htdocs/compta/facture/card.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index b1d1116e54c..6f4796106c7 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4001,14 +4001,12 @@ else if ($id > 0 || ! empty($ref)) } print ''; } - + $displayWarranty = false; - if( !empty($object->situation_final) - && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) - ) + if( ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) ) { // Check if this situation invoice is 100% for real - if(!empty($object->lines)){ + if(!empty($object->situation_final) && !empty($object->lines)){ $displayWarranty = true; foreach( $object->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ From 40369280ba330e9645d5e52835f212311e01883a Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Tue, 25 Sep 2018 12:16:16 +0200 Subject: [PATCH 006/798] fix allow empty selection on form conditions reglement --- 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 6f4796106c7..4974bcb4a39 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -3129,7 +3129,7 @@ if ($action == 'create') print ''; print ' + Date: Tue, 16 Apr 2019 16:21:32 +0200 Subject: [PATCH 021/798] 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 022/798] 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 023/798] 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 024/798] 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 025/798] 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 79fc351cbdf204807c01e065cf5fe4e064f1a107 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Wed, 17 Apr 2019 09:26:45 +0200 Subject: [PATCH 026/798] 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 027/798] 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 b73df2698dbf7310473d40f2ad8a35c955c13c9b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 14:25:41 +0200 Subject: [PATCH 028/798] FIX better compatibility with Multicompany --- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/comm/propal/list.php | 2 +- htdocs/commande/card.php | 167 +++++++++--------- htdocs/commande/class/commande.class.php | 16 +- htdocs/commande/document.php | 6 +- htdocs/commande/index.php | 12 +- htdocs/commande/list.php | 8 +- htdocs/commande/orderstoinvoice.php | 4 +- htdocs/compta/facture/document.php | 2 +- htdocs/compta/facture/list.php | 2 +- htdocs/core/class/html.formfile.class.php | 2 +- htdocs/core/lib/files.lib.php | 20 +-- htdocs/core/lib/order.lib.php | 2 +- .../doc/doc_generic_order_odt.modules.php | 2 +- .../commande/doc/pdf_einstein.modules.php | 4 +- .../commande/doc/pdf_eratosthene.modules.php | 4 +- .../modules/commande/mod_commande_marbre.php | 2 +- .../modules/commande/mod_commande_saphir.php | 5 +- htdocs/support/index.php | 2 +- 19 files changed, 133 insertions(+), 131 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 0b9863f287b..4945ff63305 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1138,7 +1138,7 @@ class Propal extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $sql.= " SET fk_delivery_address = ".$this->fk_delivery_address; $sql.= " WHERE ref = '".$this->db->escape($this->ref)."'"; - $sql.= " AND entity = ".$conf->entity; + $sql.= " AND entity = ".$this->entity; $result=$this->db->query($sql); } diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index b02f788f040..01b07e0d08d 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -998,7 +998,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 05d02c487c0..32863263d7f 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -96,9 +96,17 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('ordercard','globalcard')); -$permissionnote = $user->rights->commande->creer; // Used by the include of actions_setnotes.inc.php -$permissiondellink = $user->rights->commande->creer; // Used by the include of actions_dellink.inc.php -$permissionedit = $user->rights->commande->creer; // Used by the include of actions_lineupdown.inc.php +$usercanread = $user->rights->commande->lire; +$usercancreate = $user->rights->commande->creer; +$usercanclose = $user->rights->commande->cloturer; +$usercandelete = $user->rights->commande->supprimer; +$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))); +$usercancancel = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->annuler))); +$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->commande->order_advance->send); + +$permissionnote = $usercancreate; // Used by the include of actions_setnotes.inc.php +$permissiondellink = $usercancreate; // Used by the include of actions_dellink.inc.php +$permissionedit = $usercancreate; // Used by the include of actions_lineupdown.inc.php /* @@ -129,7 +137,7 @@ if (empty($reshook)) include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php'; // Must be include, not include_once // Action clone object - if ($action == 'confirm_clone' && $confirm == 'yes' && $user->rights->commande->creer) + if ($action == 'confirm_clone' && $confirm == 'yes' && $usercancreate) { if (1==0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers')) { @@ -159,7 +167,7 @@ if (empty($reshook)) } // Reopen a closed order - elseif ($action == 'reopen' && $user->rights->commande->creer) + elseif ($action == 'reopen' && $usercancreate) { if ($object->statut == Commande::STATUS_CANCELED || $object->statut == Commande::STATUS_CLOSED) { @@ -176,7 +184,7 @@ if (empty($reshook)) } // Remove order - elseif ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->commande->supprimer) + elseif ($action == 'confirm_delete' && $confirm == 'yes' && $usercandelete) { $result = $object->delete($user); if ($result > 0) @@ -191,7 +199,7 @@ if (empty($reshook)) } // Remove a product line - elseif ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->commande->creer) + elseif ($action == 'confirm_deleteline' && $confirm == 'yes' && $usercancreate) { $result = $object->deleteline($user, $lineid); if ($result > 0) @@ -222,13 +230,13 @@ if (empty($reshook)) } // Link to a project - elseif ($action == 'classin' && $user->rights->commande->creer) + elseif ($action == 'classin' && $usercancreate) { $object->setProject(GETPOST('projectid', 'int')); } // Add order - elseif ($action == 'add' && $user->rights->commande->creer) + elseif ($action == 'add' && $usercancreate) { $datecommande = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $datelivraison = dol_mktime(12, 0, 0, GETPOST('liv_month'), GETPOST('liv_day'), GETPOST('liv_year')); @@ -252,6 +260,7 @@ if (empty($reshook)) $db->begin(); $object->date_commande = $datecommande; + $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->source = GETPOST('source_id'); @@ -481,7 +490,7 @@ if (empty($reshook)) } } - elseif ($action == 'classifybilled' && $user->rights->commande->creer) + elseif ($action == 'classifybilled' && $usercancreate) { $ret=$object->classifyBilled($user); @@ -489,7 +498,7 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } } - elseif ($action == 'classifyunbilled' && $user->rights->commande->creer) + elseif ($action == 'classifyunbilled' && $usercancreate) { $ret=$object->classifyUnBilled(); if ($ret < 0) { @@ -498,7 +507,7 @@ if (empty($reshook)) } // Positionne ref commande client - elseif ($action == 'setref_client' && $user->rights->commande->creer) { + elseif ($action == 'setref_client' && $usercancreate) { $result = $object->set_ref_client($user, GETPOST('ref_client')); if ($result < 0) { @@ -506,7 +515,7 @@ if (empty($reshook)) } } - elseif ($action == 'setremise' && $user->rights->commande->creer) { + elseif ($action == 'setremise' && $usercancreate) { $result = $object->set_remise($user, GETPOST('remise')); if ($result < 0) { @@ -514,7 +523,7 @@ if (empty($reshook)) } } - elseif ($action == 'setabsolutediscount' && $user->rights->commande->creer) { + elseif ($action == 'setabsolutediscount' && $usercancreate) { if (GETPOST('remise_id')) { if ($object->id > 0) { $object->insert_discount(GETPOST('remise_id')); @@ -524,7 +533,7 @@ if (empty($reshook)) } } - elseif ($action == 'setdate' && $user->rights->commande->creer) { + elseif ($action == 'setdate' && $usercancreate) { // print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year']; $date = dol_mktime(0, 0, 0, GETPOST('order_month'), GETPOST('order_day'), GETPOST('order_year')); @@ -534,7 +543,7 @@ if (empty($reshook)) } } - elseif ($action == 'setdate_livraison' && $user->rights->commande->creer) { + elseif ($action == 'setdate_livraison' && $usercancreate) { // print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year']; $datelivraison = dol_mktime(0, 0, 0, GETPOST('liv_month'), GETPOST('liv_day'), GETPOST('liv_year')); @@ -544,35 +553,35 @@ if (empty($reshook)) } } - elseif ($action == 'setmode' && $user->rights->commande->creer) { + elseif ($action == 'setmode' && $usercancreate) { $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } // Multicurrency Code - elseif ($action == 'setmulticurrencycode' && $user->rights->commande->creer) { + elseif ($action == 'setmulticurrencycode' && $usercancreate) { $result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha')); } // Multicurrency rate - elseif ($action == 'setmulticurrencyrate' && $user->rights->commande->creer) { + elseif ($action == 'setmulticurrencyrate' && $usercancreate) { $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx'))); } - elseif ($action == 'setavailability' && $user->rights->commande->creer) { + elseif ($action == 'setavailability' && $usercancreate) { $result = $object->availability(GETPOST('availability_id')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } - elseif ($action == 'setdemandreason' && $user->rights->commande->creer) { + elseif ($action == 'setdemandreason' && $usercancreate) { $result = $object->demand_reason(GETPOST('demand_reason_id')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } - elseif ($action == 'setconditions' && $user->rights->commande->creer) { + elseif ($action == 'setconditions' && $usercancreate) { $result = $object->setPaymentTerms(GETPOST('cond_reglement_id', 'int')); if ($result < 0) { dol_print_error($db, $object->error); @@ -604,7 +613,7 @@ if (empty($reshook)) } // bank account - elseif ($action == 'setbankaccount' && $user->rights->commande->creer) { + elseif ($action == 'setbankaccount' && $usercancreate) { $result=$object->setBankAccount(GETPOST('fk_account', 'int')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); @@ -612,7 +621,7 @@ if (empty($reshook)) } // shipping method - elseif ($action == 'setshippingmethod' && $user->rights->commande->creer) { + elseif ($action == 'setshippingmethod' && $usercancreate) { $result = $object->setShippingMethod(GETPOST('shipping_method_id', 'int')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); @@ -620,23 +629,23 @@ if (empty($reshook)) } // warehouse - elseif ($action == 'setwarehouse' && $user->rights->commande->creer) { + elseif ($action == 'setwarehouse' && $usercancreate) { $result = $object->setWarehouse(GETPOST('warehouse_id', 'int')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } - elseif ($action == 'setremisepercent' && $user->rights->commande->creer) { + elseif ($action == 'setremisepercent' && $usercancreate) { $result = $object->set_remise($user, GETPOST('remise_percent')); } - elseif ($action == 'setremiseabsolue' && $user->rights->commande->creer) { + elseif ($action == 'setremiseabsolue' && $usercancreate) { $result = $object->set_remise_absolue($user, GETPOST('remise_absolue')); } // Add a new line - elseif ($action == 'addline' && $user->rights->commande->creer) + elseif ($action == 'addline' && $usercancreate) { $langs->load('errors'); $error = 0; @@ -999,7 +1008,7 @@ if (empty($reshook)) /* * Update a line */ - elseif ($action == 'updateline' && $user->rights->commande->creer && GETPOST('save')) + elseif ($action == 'updateline' && $usercancreate && GETPOST('save')) { // Clean parameters $date_start=''; @@ -1133,15 +1142,12 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } } - } elseif ($action == 'updateline' && $user->rights->commande->creer && GETPOST('cancel', 'alpha') == $langs->trans('Cancel')) { + } elseif ($action == 'updateline' && $usercancreate && GETPOST('cancel', 'alpha') == $langs->trans('Cancel')) { header('Location: ' . $_SERVER['PHP_SELF'] . '?id=' . $object->id); // Pour reaffichage de la fiche en cours d'edition exit(); } - elseif ($action == 'confirm_validate' && $confirm == 'yes' && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))) - ) + elseif ($action == 'confirm_validate' && $confirm == 'yes' && $usercanvalidate) { $idwarehouse = GETPOST('idwarehouse'); @@ -1195,7 +1201,7 @@ if (empty($reshook)) } // Go back to draft status - elseif ($action == 'confirm_modif' && $user->rights->commande->creer) { + elseif ($action == 'confirm_modif' && $usercancreate) { $idwarehouse = GETPOST('idwarehouse'); $qualified_for_stock_change=0; @@ -1243,17 +1249,14 @@ if (empty($reshook)) } } - elseif ($action == 'confirm_shipped' && $confirm == 'yes' && $user->rights->commande->cloturer) { + elseif ($action == 'confirm_shipped' && $confirm == 'yes' && $usercanclose) { $result = $object->cloture($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } - elseif ($action == 'confirm_cancel' && $confirm == 'yes' && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))) - ) + elseif ($action == 'confirm_cancel' && $confirm == 'yes' && $usercanvalidate) { $idwarehouse = GETPOST('idwarehouse'); @@ -1310,7 +1313,7 @@ if (empty($reshook)) if ($error) $action = 'edit_extras'; } - if ($action == 'set_thirdparty' && $user->rights->commande->creer) + if ($action == 'set_thirdparty' && $usercancreate) { $object->fetch($id); $object->setValueFrom('fk_soc', $socid, '', '', 'date', '', $user, 'ORDER_MODIFY'); @@ -1321,7 +1324,7 @@ if (empty($reshook)) // add lines from objectlinked if($action == 'import_lines_from_object' - && $user->rights->commande->creer + && $usercancreate && $object->statut == Commande::STATUS_DRAFT ) { @@ -1405,8 +1408,8 @@ if (empty($reshook)) include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; // Actions to build doc - $upload_dir = $conf->commande->dir_output; - $permissioncreate = $user->rights->commande->creer; + $upload_dir = $conf->commande->multidir_output[$object->entity]; + $permissioncreate = $usercancreate; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; // Actions to send emails @@ -1417,7 +1420,7 @@ if (empty($reshook)) include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; - if (! $error && ! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->commande->creer) + if (! $error && ! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $usercancreate) { if ($action == 'addcontact') { @@ -1478,7 +1481,7 @@ $formmargin = new FormMargin($db); if (! empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } // Mode creation -if ($action == 'create' && $user->rights->commande->creer) +if ($action == 'create' && $usercancreate) { print load_fiche_titre($langs->trans('CreateOrder'), '', 'title_commercial.png'); @@ -2069,8 +2072,8 @@ if ($action == 'create' && $user->rights->commande->creer) $morehtmlref='
'; // Ref customer - $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', null, null, '', 1); + $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', null, null, '', 1); // Thirdparty $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref.=' ('.$langs->trans("OtherOrders").')'; @@ -2079,7 +2082,7 @@ if ($action == 'create' && $user->rights->commande->creer) { $langs->load("projects"); $morehtmlref.='
'.$langs->trans('Project') . ' '; - if ($user->rights->commande->creer) + if ($usercancreate) { if ($action != 'classify') $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; @@ -2159,7 +2162,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Date print '
'; print ''; print ''; print '
'; - print $langs->trans('RetainedWarrantyDateLimit'); + // Retained warranty payment term + print '
'; + print ''; - if ($action != 'editretainedwarrantydatelimit' && $user->rights->facture->creer){ - print ''; + if ($action != 'editretainedwarrantypaymentterms' && $user->rights->facture->creer){ + print ''; } print '
'; + print $langs->trans('PaymentConditionsShortRetainedWarranty'); print 'id . '">' . img_edit($langs->trans('setretainedwarrantyDateLimit'), 1) . 'id . '">' . img_edit($langs->trans('setPaymentConditionsShortRetainedWarranty'), 1) . '
'; @@ -3983,21 +4062,66 @@ else if ($id > 0 || ! empty($ref)) $defaultDate = $object->date; } - if ($action == 'editretainedwarrantydatelimit') + if ($action == 'editretainedwarrantypaymentterms') { //date('Y-m-d',$object->date_lim_reglement) print ''; - print ''; + print ''; print ''; - print ''; + $retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); + $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $object->retained_warranty_fk_cond_reglement; + $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID; + $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement'); print ''; print ''; } else { - print dol_print_date($defaultDate); + print $form->form_conditions_reglement($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $object->retained_warranty_fk_cond_reglement, 'none'); + if(!$displayWarranty){ + print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')); + } } print '
'; + print ''; + if ($action != 'editretainedwarrantydatelimit' && $user->rights->facture->creer){ + print ''; + } + + print '
'; + print $langs->trans('RetainedWarrantyDateLimit'); + print 'id . '">' . img_edit($langs->trans('setretainedwarrantyDateLimit'), 1) . '
'; + print '
'; + $defaultDate = !empty($object->retained_warranty_date_limit)?$object->retained_warranty_date_limit:strtotime('-1 years', $object->date_lim_reglement); + if($object->date > $defaultDate){ + $defaultDate = $object->date; + } + + if ($action == 'editretainedwarrantydatelimit') + { + //date('Y-m-d',$object->date_lim_reglement) + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + else + { + print dol_print_date($object->retained_warranty_date_limit, 'day'); + } + print '
' . $langs->trans("Billed") . ' :' . price($object->total_ttc) . ' 
' . $langs->trans("ToPayOn", dol_print_date($object->date_lim_reglement)) . ' :' . price($billedWithRetainedWarranty) . ' 
' . $langs->trans("ToPayOn", dol_print_date($object->date_lim_reglement, 'day')) . ' :' . price($billedWithRetainedWarranty) . ' 
'; print $langs->trans("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; - print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit)):''; + print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; print ' :' . price($retainedWarranty) . ' 
' . $langs->trans('PaymentConditionsShortRetainedWarranty') . ''; $retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID; - $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement'); + $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement', -1, 1); print '
'; - $editenable = $user->rights->commande->creer && $object->statut == Commande::STATUS_DRAFT; + $editenable = $usercancreate && $object->statut == Commande::STATUS_DRAFT; print $form->editfieldkey("Date", 'date', '', $object, $editenable); print ''; if ($action == 'editdate') { @@ -2180,7 +2183,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Delivery date planed print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("DateDeliveryPlanned", 'date_livraison', '', $object, $editenable); print ''; if ($action == 'editdate_livraison') { @@ -2202,7 +2205,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Shipping Method if (! empty($conf->expedition->enabled)) { print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("SendingMethod", 'shippingmethod', '', $object, $editenable); print ''; if ($action == 'editshippingmethod') { @@ -2220,7 +2223,7 @@ if ($action == 'create' && $user->rights->commande->creer) require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; $formproduct=new FormProduct($db); print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("Warehouse", 'warehouse', '', $object, $editenable); print ''; if ($action == 'editwarehouse') { @@ -2234,7 +2237,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Terms of payment print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("PaymentConditionsShort", 'conditions', '', $object, $editenable); print ''; if ($action == 'editconditions') { @@ -2248,7 +2251,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Mode of payment print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("PaymentMode", 'mode', '', $object, $editenable); print ''; if ($action == 'editmode') { @@ -2264,7 +2267,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Multicurrency code print '
'; - $editenable = $user->rights->commande->creer && $object->statut == Commande::STATUS_DRAFT; + $editenable = $usercancreate && $object->statut == Commande::STATUS_DRAFT; print $form->editfieldkey("Currency", 'multicurrencycode', '', $object, $editenable); print ''; if ($action == 'editmulticurrencycode') { @@ -2277,7 +2280,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Multicurrency rate print '
'; - $editenable = $user->rights->commande->creer && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $object->statut == Commande::STATUS_DRAFT; + $editenable = $usercancreate && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $object->statut == Commande::STATUS_DRAFT; print $form->editfieldkey("CurrencyRate", 'multicurrencyrate', '', $object, $editenable); print ''; if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { @@ -2298,7 +2301,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Delivery delay print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("AvailabilityPeriod", 'availability', '', $object, $editenable); print ''; if ($action == 'editavailability') { @@ -2310,7 +2313,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Source reason (why we have an ordrer) print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("Channel", 'demandreason', '', $object, $editenable); print ''; if ($action == 'editdemandreason') { @@ -2323,7 +2326,7 @@ if ($action == 'create' && $user->rights->commande->creer) // TODO Order mode (how we receive order). Not yet implemented /* print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("SourceMode", 'inputmode', '', $object, $editenable); print ''; if ($action == 'editinputmode') { @@ -2355,7 +2358,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Incoterms if (!empty($conf->incoterm->enabled)) { print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("IncotermLabel", 'incoterm', '', $object, $editenable); print ''; @@ -2373,7 +2376,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Bank Account if (! empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_ORDER) && ! empty($conf->banque->enabled)) { print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("BankAccount", 'bankaccount', '', $object, $editenable); print ''; if ($action == 'editbankaccount') { @@ -2497,7 +2500,7 @@ if ($action == 'create' && $user->rights->commande->creer) /* * Form to add new line */ - if ($object->statut == Commande::STATUS_DRAFT && $user->rights->commande->creer && $action != 'selectlines') + if ($object->statut == Commande::STATUS_DRAFT && $usercancreate && $action != 'selectlines') { if ($action != 'editline') { @@ -2528,22 +2531,19 @@ if ($action == 'create' && $user->rights->commande->creer) if (empty($reshook)) { // Send if ($object->statut > Commande::STATUS_DRAFT) { - if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->commande->order_advance->send)) { + if ($usercansend) { print ''; } else print ''; } // Valid - if ($object->statut == Commande::STATUS_DRAFT && $object->total_ttc >= 0 && $numlines > 0 && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))) - ) + if ($object->statut == Commande::STATUS_DRAFT && $object->total_ttc >= 0 && $numlines > 0 && $usercanvalidate) { print ''; } // Edit - if ($object->statut == Commande::STATUS_VALIDATED && $user->rights->commande->creer) { + if ($object->statut == Commande::STATUS_VALIDATED && $usercancreate) { print ''; } // Create event @@ -2597,12 +2597,12 @@ if ($action == 'create' && $user->rights->commande->creer) } // Reopen a closed order - if (($object->statut == Commande::STATUS_CLOSED || $object->statut == Commande::STATUS_CANCELED) && $user->rights->commande->creer) { + if (($object->statut == Commande::STATUS_CLOSED || $object->statut == Commande::STATUS_CANCELED) && $usercancreate) { print ''; } // Set to shipped - if (($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS) && $user->rights->commande->cloturer) { + if (($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS) && $usercanclose) { print ''; } @@ -2612,31 +2612,28 @@ if ($action == 'create' && $user->rights->commande->creer) if (! empty($conf->facture->enabled) && $user->rights->facture->creer && empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) { print ''; } - if ($user->rights->commande->creer && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { + if ($usercancreate && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { print ''; } } if ($object->statut > Commande::STATUS_DRAFT && $object->billed) { - if ($user->rights->commande->creer && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { + if ($usercancreate && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { print ''; } } // Clone - if ($user->rights->commande->creer) { + if ($usercancreate) { print ''; } // Cancel order - if ($object->statut == Commande::STATUS_VALIDATED && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->cloturer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->annuler))) - ) + if ($object->statut == Commande::STATUS_VALIDATED && (! empty($usercanclose) || ! empty($usercancancel))) { print ''; } // Delete order - if ($user->rights->commande->supprimer) { + if ($usercandelete) { if ($numshipping == 0) { print ''; } else { @@ -2659,18 +2656,18 @@ if ($action == 'create' && $user->rights->commande->creer) // Documents $comref = dol_sanitizeFileName($object->ref); $relativepath = $comref . '/' . $comref . '.pdf'; - $filedir = $conf->commande->dir_output . '/' . $comref; + $filedir = $conf->commande->multidir_output[$object->entity] . '/' . $comref; $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; - $genallowed = $user->rights->commande->lire; - $delallowed = $user->rights->commande->creer; - print $formfile->showdocuments('commande', $comref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); + $genallowed = $usercanread; + $delallowed = $usercancreate; + print $formfile->showdocuments('commande', $comref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang, '', $object); // Show links to link elements $linktoelem = $form->showLinkToObjectBlock($object, null, array('order')); $compatibleImportElementsList = false; - if($user->rights->commande->creer + if($usercancreate && $object->statut == Commande::STATUS_DRAFT) { $compatibleImportElementsList = array('commande','propal'); // import from linked elements @@ -2707,7 +2704,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Presend form $modelmail='order_send'; $defaulttopic='SendOrderRef'; - $diroutput = $conf->commande->dir_output; + $diroutput = $conf->commande->multidir_output[$object->entity]; $trackid = 'ord'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 35cb8335232..fdf9703eb8f 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -427,8 +427,8 @@ class Commande extends CommonOrder // in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); - $dirsource = $conf->commande->dir_output.'/'.$oldref; - $dirdest = $conf->commande->dir_output.'/'.$newref; + $dirsource = $conf->commande->multidir_output[$this->entity].'/'.$oldref; + $dirdest = $conf->commande->multidir_output[$this->entity].'/'.$newref; if (file_exists($dirsource)) { dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); @@ -437,7 +437,7 @@ class Commande extends CommonOrder { dol_syslog("Rename ok"); // Rename docs starting with $oldref with $newref - $listoffiles=dol_dir_list($conf->commande->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); + $listoffiles=dol_dir_list($conf->commande->multidir_output[$this->entity].'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); foreach($listoffiles as $fileentry) { $dirsource=$fileentry['name']; @@ -776,6 +776,7 @@ class Commande extends CommonOrder // Clean parameters $this->brouillon = 1; // set command as draft + if (empty($this->entity)) $this->entity = $conf->entity; // $date_commande is deprecated $date = ($this->date_commande ? $this->date_commande : $this->date); @@ -859,7 +860,7 @@ class Commande extends CommonOrder $sql.= ", ".($this->remise_percent>0?$this->db->escape($this->remise_percent):0); $sql.= ", ".(int) $this->fk_incoterms; $sql.= ", '".$this->db->escape($this->location_incoterms)."'"; - $sql.= ", ".$conf->entity; + $sql.= ", ".$this->entity; $sql.= ", ".($this->module_source ? "'".$this->db->escape($this->module_source)."'" : "null"); $sql.= ", ".($this->pos_source != '' ? "'".$this->db->escape($this->pos_source)."'" : "null"); $sql.= ", ".(int) $this->fk_multicurrency; @@ -1232,6 +1233,7 @@ class Commande extends CommonOrder $this->lines[$i] = $line; } + $this->entity = $object->entity; $this->socid = $object->socid; $this->fk_project = $object->fk_project; $this->cond_reglement_id = $object->cond_reglement_id; @@ -3320,10 +3322,10 @@ class Commande extends CommonOrder { // Remove directory with files $comref = dol_sanitizeFileName($this->ref); - if ($conf->commande->dir_output && !empty($this->ref)) + if ($conf->commande->multidir_output[$this->entity] && !empty($this->ref)) { - $dir = $conf->commande->dir_output . "/" . $comref ; - $file = $conf->commande->dir_output . "/" . $comref . "/" . $comref . ".pdf"; + $dir = $conf->commande->multidir_output[$this->entity] . "/" . $comref ; + $file = $conf->commande->multidir_output[$this->entity] . "/" . $comref . "/" . $comref . ".pdf"; if (file_exists($file)) // We must delete all files before deleting directory { dol_delete_preview($this); diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 37cbc70cd40..ec6ed2fd91b 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -72,7 +72,7 @@ $object = new Commande($db); if ($object->fetch($id)) { $object->fetch_thirdparty(); - $upload_dir = $conf->commande->dir_output . "/" . dol_sanitizeFileName($object->ref); + $upload_dir = $conf->commande->multidir_output[$object->entity] . "/" . dol_sanitizeFileName($object->ref); } include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php'; @@ -92,7 +92,7 @@ if ($id > 0 || ! empty($ref)) { $object->fetch_thirdparty(); - $upload_dir = $conf->commande->dir_output.'/'.dol_sanitizeFileName($object->ref); + $upload_dir = $conf->commande->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); $head = commande_prepare_head($object); dol_fiche_head($head, 'documents', $langs->trans('CustomerOrder'), -1, 'order'); @@ -174,7 +174,7 @@ if ($id > 0 || ! empty($ref)) $modulepart = 'commande'; $permission = $user->rights->commande->creer; $permtoedit = $user->rights->commande->creer; - $param = '&id=' . $object->id; + $param = '&id=' . $object->id.'&entity=' . (! empty($object->entity)?$object->entity:$conf->entity); include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; } else diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index c0091b43af0..123bb64b837 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -235,7 +235,7 @@ $max=5; * Last modified orders */ -$sql = "SELECT c.rowid, c.ref, c.fk_statut, c.facture, c.date_cloture as datec, c.tms as datem,"; +$sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, c.date_cloture as datec, c.tms as datem,"; $sql.= " s.nom as name, s.rowid as socid"; $sql.= ", s.client"; $sql.= ", s.code_client"; @@ -291,7 +291,7 @@ if ($resql) print ''; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$obj->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir); print '
'; @@ -317,7 +317,7 @@ else dol_print_error($db); */ if (! empty($conf->commande->enabled)) { - $sql = "SELECT c.rowid, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; + $sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; $sql.= ", s.client"; $sql.= ", s.code_client"; $sql.= ", s.canvas"; @@ -371,7 +371,7 @@ if (! empty($conf->commande->enabled)) print '
'; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$obj->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir); print '
'; @@ -399,7 +399,7 @@ if (! empty($conf->commande->enabled)) */ if (! empty($conf->commande->enabled)) { - $sql = "SELECT c.rowid, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; + $sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; $sql.= ", s.client"; $sql.= ", s.code_client"; $sql.= ", s.canvas"; @@ -453,7 +453,7 @@ if (! empty($conf->commande->enabled)) print '
'; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$obj->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir); print '
'; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index ad3fd777a5c..073228194b5 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -91,7 +91,7 @@ $id = (GETPOST('orderid')?GETPOST('orderid', 'int'):GETPOST('id', 'int')); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'commande', $id, ''); -$diroutputmassaction=$conf->commande->dir_output . '/temp/massgeneration/'.$user->id; +$diroutputmassaction=$conf->commande->multidir_output[$conf->entity] . '/temp/massgeneration/'.$user->id; // Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -217,7 +217,7 @@ if (empty($reshook)) $objectlabel='Orders'; $permtoread = $user->rights->commande->lire; $permtodelete = $user->rights->commande->supprimer; - $uploaddir = $conf->commande->dir_output; + $uploaddir = $conf->commande->multidir_output[$conf->entity]; $trigger_name='ORDER_SENTBYMAIL'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } @@ -928,7 +928,7 @@ if ($resql) print '
'; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$conf->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($generic_commande->element, $filename, $filedir); print '
'; diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index 44f69f512bd..9a8f308a0d1 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -97,7 +97,7 @@ if ($id > 0 || ! empty($ref)) { $object->fetch_thirdparty(); - $upload_dir = $conf->facture->dir_output.'/'.dol_sanitizeFileName($object->ref); + $upload_dir = $conf->facture->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); $head = facture_prepare_head($object); dol_fiche_head($head, 'documents', $langs->trans('InvoiceCustomer'), -1, 'bill'); diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 05ce6cc3504..b89d257e258 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -1202,7 +1202,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 576aff4db66..858d16948e2 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1228,7 +1228,7 @@ class FormFile print ''; } // Preview link - if (! $editline) print $this->showPreview($file, $modulepart, $filepath); + if (! $editline) print $this->showPreview($file, $modulepart, $filepath, 0, '&entity='.(! empty($object->entity)?$object->entity:$onf->entity)); print "\n"; diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index e00f79b27bc..c7585b65254 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2186,10 +2186,10 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file=$conf->adherent->dir_output.'/'.$original_file; } // Wrapping pour les apercu factures - elseif ($modulepart == 'apercufacture' && !empty($conf->facture->dir_output)) + elseif ($modulepart == 'apercufacture' && !empty($conf->facture->multidir_output[$entity])) { if ($fuser->rights->facture->{$lire}) $accessallowed=1; - $original_file=$conf->facture->dir_output.'/'.$original_file; + $original_file=$conf->facture->multidir_output[$entity].'/'.$original_file; } // Wrapping pour les apercu propal elseif ($modulepart == 'apercupropal' && !empty($conf->propal->multidir_output[$entity])) @@ -2198,10 +2198,10 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file=$conf->propal->multidir_output[$entity].'/'.$original_file; } // Wrapping pour les apercu commande - elseif ($modulepart == 'apercucommande' && !empty($conf->commande->dir_output)) + elseif ($modulepart == 'apercucommande' && !empty($conf->commande->multidir_output[$entity])) { if ($fuser->rights->commande->{$lire}) $accessallowed=1; - $original_file=$conf->commande->dir_output.'/'.$original_file; + $original_file=$conf->commande->multidir_output[$entity].'/'.$original_file; } // Wrapping pour les apercu intervention elseif (($modulepart == 'apercufichinter' || $modulepart == 'apercuficheinter') && !empty($conf->ficheinter->dir_output)) @@ -2397,13 +2397,13 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping for invoices - elseif (($modulepart == 'facture' || $modulepart == 'invoice') && !empty($conf->facture->dir_output)) + elseif (($modulepart == 'facture' || $modulepart == 'invoice') && !empty($conf->facture->multidir_output[$entity])) { if ($fuser->rights->facture->{$lire} || preg_match('/^specimen/i', $original_file)) { $accessallowed=1; } - $original_file=$conf->facture->dir_output.'/'.$original_file; + $original_file=$conf->facture->multidir_output[$entity].'/'.$original_file; $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } // Wrapping for mass actions @@ -2421,7 +2421,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, { $accessallowed=1; } - $original_file=$conf->commande->dir_output.'/temp/massgeneration/'.$user->id.'/'.$original_file; + $original_file=$conf->commande->multidir_output[$entity].'/temp/massgeneration/'.$user->id.'/'.$original_file; } elseif ($modulepart == 'massfilesarea_invoices') { @@ -2429,7 +2429,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, { $accessallowed=1; } - $original_file=$conf->facture->dir_output.'/temp/massgeneration/'.$user->id.'/'.$original_file; + $original_file=$conf->facture->multidir_output[$entity].'/temp/massgeneration/'.$user->id.'/'.$original_file; } elseif ($modulepart == 'massfilesarea_expensereport') { @@ -2513,13 +2513,13 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping pour les commandes - elseif (($modulepart == 'commande' || $modulepart == 'order') && !empty($conf->commande->dir_output)) + elseif (($modulepart == 'commande' || $modulepart == 'order') && !empty($conf->commande->multidir_output[$entity])) { if ($fuser->rights->commande->{$lire} || preg_match('/^specimen/i', $original_file)) { $accessallowed=1; } - $original_file=$conf->commande->dir_output.'/'.$original_file; + $original_file=$conf->commande->multidir_output[$entity].'/'.$original_file; $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."commande WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } diff --git a/htdocs/core/lib/order.lib.php b/htdocs/core/lib/order.lib.php index 6e276dcf8f4..5727ececb5e 100644 --- a/htdocs/core/lib/order.lib.php +++ b/htdocs/core/lib/order.lib.php @@ -96,7 +96,7 @@ function commande_prepare_head(Commande $object) require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->commande->dir_output . "/" . dol_sanitizeFileName($object->ref); + $upload_dir = $conf->commande->multidir_output[$object->entity] . "/" . 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.'/commande/document.php?id='.$object->id; diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php index 5685a839314..eced22d03d8 100644 --- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php +++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php @@ -244,7 +244,7 @@ class doc_generic_order_odt extends ModelePDFCommandes } } - $dir = $conf->commande->dir_output; + $dir = $conf->commande->multidir_output[$object->entity]; $objectref = dol_sanitizeFileName($object->ref); if (! preg_match('/specimen/i', $objectref)) $dir.= "/" . $objectref; $file = $dir . "/" . $objectref . ".odt"; diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 5975da49fbe..78cb2adc9f9 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -239,13 +239,13 @@ class pdf_einstein extends ModelePDFCommandes // Definition of $dir and $file if ($object->specimen) { - $dir = $conf->commande->dir_output; + $dir = $conf->commande->multidir_output[$conf->entity]; $file = $dir . "/SPECIMEN.pdf"; } else { $objectref = dol_sanitizeFileName($object->ref); - $dir = $conf->commande->dir_output . "/" . $objectref; + $dir = $conf->commande->multidir_output[$object->entity] . "/" . $objectref; $file = $dir . "/" . $objectref . ".pdf"; } diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 1abc6c95e20..d0c5197587f 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -281,13 +281,13 @@ class pdf_eratosthene extends ModelePDFCommandes // Definition of $dir and $file if ($object->specimen) { - $dir = $conf->commande->dir_output; + $dir = $conf->commande->multidir_output[$conf->entity]; $file = $dir . "/SPECIMEN.pdf"; } else { $objectref = dol_sanitizeFileName($object->ref); - $dir = $conf->commande->dir_output . "/" . $objectref; + $dir = $conf->commande->multidir_output[$object->entity] . "/" . $objectref; $file = $dir . "/" . $objectref . ".pdf"; } diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php index 28d488eb6fb..160a07635f4 100644 --- a/htdocs/core/modules/commande/mod_commande_marbre.php +++ b/htdocs/core/modules/commande/mod_commande_marbre.php @@ -121,7 +121,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."commande"; $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; - $sql.= " AND entity = ".$conf->entity; + $sql.= " AND entity IN (".getEntity('ordernumber', 1, $object).")"; $resql=$db->query($sql); if ($resql) diff --git a/htdocs/core/modules/commande/mod_commande_saphir.php b/htdocs/core/modules/commande/mod_commande_saphir.php index 8c96c237a0f..f722a017c0b 100644 --- a/htdocs/core/modules/commande/mod_commande_saphir.php +++ b/htdocs/core/modules/commande/mod_commande_saphir.php @@ -137,9 +137,12 @@ class mod_commande_saphir extends ModeleNumRefCommandes return 0; } + // Get entities + $entity = getEntity('ordernumber', 1, $object); + $date = ($object->date_commande ? $object->date_commande : $object->date); - $numFinal=get_next_value($db, $mask, 'commande', 'ref', '', $objsoc, $date); + $numFinal=get_next_value($db, $mask, 'commande', 'ref', '', $objsoc, $date, 'next', false, null, $entity); return $numFinal; } diff --git a/htdocs/support/index.php b/htdocs/support/index.php index c5f0494eb59..9bc1027805a 100644 --- a/htdocs/support/index.php +++ b/htdocs/support/index.php @@ -73,7 +73,7 @@ print '
'.img_picto('', 'who.png', 'class="valigntex print ''.$langs->trans("CommunitySupport").''; print '
'.$langs->trans("TypeOfSupport").': '.$langs->trans("TypeSupportCommunauty").''; print '
'.$langs->trans("TypeOfHelp").'/'.$langs->trans("Efficiency").'/'.$langs->trans("Price").': '; -print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); +print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); print '
'; print ''; From 82ee85b665f7f5fc2155f2c7f22090c0208b3d81 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 14:29:41 +0200 Subject: [PATCH 029/798] FIX remove test --- htdocs/support/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/support/index.php b/htdocs/support/index.php index 9bc1027805a..c5f0494eb59 100644 --- a/htdocs/support/index.php +++ b/htdocs/support/index.php @@ -73,7 +73,7 @@ print '
'.img_picto('', 'who.png', 'class="valigntex print ''.$langs->trans("CommunitySupport").''; print '
'.$langs->trans("TypeOfSupport").': '.$langs->trans("TypeSupportCommunauty").''; print '
'.$langs->trans("TypeOfHelp").'/'.$langs->trans("Efficiency").'/'.$langs->trans("Price").': '; -print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); +print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); print '
'; print ''; From 62489d1f5ef67fa97e263cecf12de883eb8e70fc Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 14:41:30 +0200 Subject: [PATCH 030/798] FIX replace "dir_output" with "multidir_output" --- htdocs/compta/facture/card.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index beebe3cb561..3733fda8e67 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2425,7 +2425,7 @@ $result = $object->updateline(GETPOST('lineid'), $description, $pu_ht, $qty, GET include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; // Actions to build doc - $upload_dir = $conf->facture->dir_output; + $upload_dir = $conf->facture->multidir_output[$object->entity]; $permissioncreate=$usercancreate; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; @@ -4859,12 +4859,12 @@ elseif ($id > 0 || ! empty($ref)) // Documents generes $filename = dol_sanitizeFileName($object->ref); - $filedir = $conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref); + $filedir = $conf->facture->multidir_output[$object->entity] . '/' . dol_sanitizeFileName($object->ref); $urlsource = $_SERVER['PHP_SELF'] . '?facid=' . $object->id; $genallowed = $usercanread; $delallowed = $usercancreate; - print $formfile->showdocuments('facture', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); + print $formfile->showdocuments('facture', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang, '', $object); $somethingshown = $formfile->numoffiles; // Show links to link elements @@ -4911,7 +4911,7 @@ elseif ($id > 0 || ! empty($ref)) // Presend form $modelmail='facture_send'; $defaulttopic='SendBillRef'; - $diroutput = $conf->facture->dir_output; + $diroutput = $conf->facture->multidir_output[$object->entity]; $trackid = 'inv'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; From 3cb6ca34e9596587779fa0f722b0c76365dcb1ef Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 16:06:16 +0200 Subject: [PATCH 031/798] FIX multicompany compatibility --- htdocs/core/class/conf.class.php | 3 +++ htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 861c273e28a..d3ca2c6126f 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -327,6 +327,9 @@ class Conf } // For mycompany storage + $this->mycompany->multidir_output = array($this->entity => $rootfordata."/mycompany"); + $this->mycompany->multidir_temp = array($this->entity => $rootfordata."/mycompany/temp"); + // For backward compatibility $this->mycompany->dir_output=$rootfordata."/mycompany"; $this->mycompany->dir_temp=$rootfordata."/mycompany/temp"; diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 78cb2adc9f9..63f9093842b 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1255,7 +1255,8 @@ class pdf_einstein extends ModelePDFCommandes // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + var_dump($conf->mycompany); exit; + $logo=$conf->mycompany->dir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) From 156b25a702665077d880a3212a591f51297fdd7b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 16:36:29 +0200 Subject: [PATCH 032/798] FIX use "multidir_output" instead "dir_output" --- htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 5 ++--- .../core/modules/commande/doc/pdf_eratosthene.modules.php | 4 ++-- htdocs/core/modules/facture/doc/pdf_crabe.modules.php | 4 ++-- htdocs/core/modules/facture/doc/pdf_sponge.modules.php | 6 +++--- htdocs/core/modules/propale/doc/pdf_azur.modules.php | 4 ++-- htdocs/core/modules/propale/doc/pdf_cyan.modules.php | 4 ++-- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 63f9093842b..f9c62a197ff 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -290,7 +290,7 @@ class pdf_einstein extends ModelePDFCommandes // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1255,8 +1255,7 @@ class pdf_einstein extends ModelePDFCommandes // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - var_dump($conf->mycompany); exit; - $logo=$conf->mycompany->dir_output[$object->entity].'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index d0c5197587f..ff1c84a2783 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -331,7 +331,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1390,7 +1390,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index a641e209f9e..dd6300f4296 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -340,7 +340,7 @@ class pdf_crabe extends ModelePDFFactures // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1582,7 +1582,7 @@ class pdf_crabe extends ModelePDFFactures // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 9c7c7797841..fbe5bdfb5da 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -352,7 +352,7 @@ class pdf_sponge extends ModelePDFFactures // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -449,7 +449,7 @@ class pdf_sponge extends ModelePDFFactures complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $pdf->startTransaction(); $pdf->SetFont('', '', $default_font_size - 1); @@ -1600,7 +1600,7 @@ class pdf_sponge extends ModelePDFFactures // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 54fe56421ea..5f5b2dcf4cb 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -344,7 +344,7 @@ class pdf_azur extends ModelePDFPropales // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1459,7 +1459,7 @@ class pdf_azur extends ModelePDFPropales // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 14a2456157a..0ba7cf574ce 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -330,7 +330,7 @@ class pdf_cyan extends ModelePDFPropales // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1505,7 +1505,7 @@ class pdf_cyan extends ModelePDFPropales // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) From 38246b408815c26ee0655f95f10a9af53339d426 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 11:13:26 +0200 Subject: [PATCH 033/798] NEW add new function "setEntity()" --- htdocs/commande/card.php | 1 - htdocs/commande/class/commande.class.php | 3 +-- htdocs/core/class/html.formfile.class.php | 2 +- htdocs/core/lib/functions.lib.php | 22 +++++++++++++++++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 32863263d7f..a0552586ffe 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -260,7 +260,6 @@ if (empty($reshook)) $db->begin(); $object->date_commande = $datecommande; - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->source = GETPOST('source_id'); diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 37f4ac4b9b2..d43e3eb6041 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -776,7 +776,6 @@ class Commande extends CommonOrder // Clean parameters $this->brouillon = 1; // set command as draft - if (empty($this->entity)) $this->entity = $conf->entity; // $date_commande is deprecated $date = ($this->date_commande ? $this->date_commande : $this->date); @@ -860,7 +859,7 @@ class Commande extends CommonOrder $sql.= ", ".($this->remise_percent>0?$this->db->escape($this->remise_percent):0); $sql.= ", ".(int) $this->fk_incoterms; $sql.= ", '".$this->db->escape($this->location_incoterms)."'"; - $sql.= ", ".$this->entity; + $sql.= ", ".setEntity($this); $sql.= ", ".($this->module_source ? "'".$this->db->escape($this->module_source)."'" : "null"); $sql.= ", ".($this->pos_source != '' ? "'".$this->db->escape($this->pos_source)."'" : "null"); $sql.= ", ".(int) $this->fk_multicurrency; diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 135fd2969d3..d965ca9f245 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1238,7 +1238,7 @@ class FormFile print ''; } // Preview link - if (! $editline) print $this->showPreview($file, $modulepart, $filepath, 0, '&entity='.(! empty($object->entity)?$object->entity:$onf->entity)); + if (! $editline) print $this->showPreview($file, $modulepart, $filepath, 0, '&entity='.(! empty($object->entity)?$object->entity:$conf->entity)); print "\n"; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 19b39fd776d..de52d3a74d1 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -75,7 +75,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port) * @param int $shared 0=Return id of current entity only, * 1=Return id of current entity + shared entities (default) * @param object $currentobject Current object if needed - * @return mixed Entity id(s) to use + * @return mixed Entity id(s) to use */ function getEntity($element, $shared = 1, $currentobject = null) { @@ -95,6 +95,26 @@ function getEntity($element, $shared = 1, $currentobject = null) } } +/** + * Get entity id to use when to create an object + * + * @param object $currentobject Current object + * @return mixed Entity id to use + */ +function setEntity($currentobject) +{ + global $conf, $mc; + + if (is_object($mc)) + { + return $mc->setEntity($currentobject); + } + else + { + return $conf->entity; + } +} + /** * Return information about user browser * From fc83585574254e32ecc0ed9131bcd05227b35f0e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 11:37:04 +0200 Subject: [PATCH 034/798] FIX use setEntity() to move code in multicompany module --- htdocs/comm/propal/card.php | 1 - htdocs/comm/propal/class/propal.class.php | 7 +++-- htdocs/compta/facture/card.php | 6 +---- htdocs/compta/facture/class/facture.class.php | 27 +++++++++++-------- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index c8cba5c3dda..c2d765afab7 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -380,7 +380,6 @@ if (empty($reshook)) } } else { $object->ref = GETPOST('ref'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); $object->ref_client = GETPOST('ref_client'); $object->datep = $datep; $object->date_livraison = $date_delivery; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 4945ff63305..599f3685f8d 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -890,7 +890,6 @@ class Propal extends CommonObject $now=dol_now(); // Clean parameters - if (empty($this->entity)) $this->entity = $conf->entity; if (empty($this->date)) $this->date=$this->datep; $this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600); if (empty($this->availability_id)) $this->availability_id=0; @@ -1000,7 +999,7 @@ class Propal extends CommonObject $sql.= ", ".($this->fk_project?$this->fk_project:"null"); $sql.= ", ".(int) $this->fk_incoterms; $sql.= ", '".$this->db->escape($this->location_incoterms)."'"; - $sql.= ", ".$this->entity; + $sql.= ", ".setEntity($this); $sql.= ", ".(int) $this->fk_multicurrency; $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; @@ -1091,7 +1090,7 @@ class Propal extends CommonObject $vatrate = $line->tva_tx; if ($line->vat_src_code && ! preg_match('/\(.*\)/', $vatrate)) $vatrate.=' ('.$line->vat_src_code.')'; - $result = $this->addline( + $result = $this->addline( $line->desc, $line->subprice, $line->qty, @@ -1138,7 +1137,7 @@ class Propal extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $sql.= " SET fk_delivery_address = ".$this->fk_delivery_address; $sql.= " WHERE ref = '".$this->db->escape($this->ref)."'"; - $sql.= " AND entity = ".$this->entity; + $sql.= " AND entity = ".setEntity($this); $result=$this->db->query($sql); } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index a7ce35974fb..f3361eb78ee 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -912,7 +912,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); // Proprietes particulieres a facture de remplacement $object->fk_facture_source = $_POST['fac_replacement']; @@ -946,7 +945,7 @@ if (empty($reshook)) if (! $error) { - if(!empty($originentity)){ + if (!empty($originentity)) { $object->entity = $originentity; } $object->socid = GETPOST('socid', 'int'); @@ -968,7 +967,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); // Proprietes particulieres a facture avoir $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice : ''; @@ -1150,7 +1148,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); // Source facture $object->fac_rec = GETPOST('fac_rec', 'int'); @@ -1201,7 +1198,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); if (GETPOST('type') == Facture::TYPE_SITUATION) { diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 686190c359b..991569ec4ae 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -303,7 +303,6 @@ class Facture extends CommonInvoice if (! $this->cond_reglement_id) $this->cond_reglement_id = 0; if (! $this->mode_reglement_id) $this->mode_reglement_id = 0; $this->brouillon = 1; - if (empty($this->entity)) $this->entity = $conf->entity; // Multicurrency (test on $this->multicurrency_tx because we should take the default rate only if not using origin rate) if (!empty($this->multicurrency_code) && empty($this->multicurrency_tx)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code); @@ -474,7 +473,7 @@ class Facture extends CommonInvoice $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; - $sql.= ", ".$this->entity; + $sql.= ", ".setEntity($this); $sql.= ", ".($this->ref_ext?"'".$this->db->escape($this->ref_ext)."'":"null"); $sql.= ", '".$this->db->escape($this->type)."'"; $sql.= ", '".$socid."'"; @@ -913,8 +912,8 @@ class Facture extends CommonInvoice $facture->remise_absolue = $this->remise_absolue; $facture->remise_percent = $this->remise_percent; - $facture->origin = $this->origin; - $facture->origin_id = $this->origin_id; + $facture->origin = $this->origin; + $facture->origin_id = $this->origin_id; $facture->lines = $this->lines; // Tableau des lignes de factures $facture->products = $this->lines; // Tant que products encore utilise @@ -1582,7 +1581,11 @@ class Facture extends CommonInvoice $this->tab_previous_situation_invoice = array(); $this->tab_next_situation_invoice = array(); - $sql = 'SELECT rowid, situation_counter FROM '.MAIN_DB_PREFIX.'facture WHERE rowid <> '.$this->id.' AND entity = '.$conf->entity.' AND situation_cycle_ref = '.(int) $this->situation_cycle_ref.' ORDER BY situation_counter ASC'; + $sql = 'SELECT rowid, situation_counter FROM '.MAIN_DB_PREFIX.'facture'; + $sql.= ' WHERE rowid <> '.$this->id; + $sql.= ' AND entity = '.$this->entity; + $sql.= ' AND situation_cycle_ref = '.(int) $this->situation_cycle_ref; + $sql.= ' ORDER BY situation_counter ASC'; dol_syslog(get_class($this).'::fetchPreviousNextSituationInvoice ', LOG_DEBUG); $result = $this->db->query($sql); @@ -3648,11 +3651,11 @@ class Facture extends CommonInvoice $sql.= " AND ff.type IS NULL"; // Renvoi vrai si pas facture de remplacement $sql.= " AND f.type != ".self::TYPE_CREDIT_NOTE; // Type non 2 si facture non avoir - if($conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE){ + if (! empty($conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE)) { // Select the last situation invoice $sqlSit = 'SELECT MAX(fs.rowid)'; $sqlSit.= " FROM ".MAIN_DB_PREFIX."facture as fs"; - $sqlSit.= " WHERE fs.entity = ".$conf->entity; + $sqlSit.= " WHERE fs.entity IN (".getEntity('invoice').")"; $sqlSit.= " AND fs.type = ".self::TYPE_SITUATION; $sqlSit.= " AND fs.fk_statut in (".self::STATUS_VALIDATED.",".self::STATUS_CLOSED.")"; $sqlSit.= " GROUP BY fs.situation_cycle_ref"; @@ -4178,7 +4181,7 @@ class Facture extends CommonInvoice public function newCycle() { $sql = 'SELECT max(situation_cycle_ref) FROM ' . MAIN_DB_PREFIX . 'facture as f'; - $sql.= " WHERE f.entity in (".getEntity('invoice', 0).")"; + $sql.= " WHERE f.entity IN (".getEntity('invoice', 0).")"; $resql = $this->db->query($sql); if ($resql) { if ($resql->num_rows > 0) @@ -4222,8 +4225,8 @@ class Facture extends CommonInvoice global $conf; $sql = 'SELECT rowid FROM ' . MAIN_DB_PREFIX . 'facture'; - $sql .= ' where situation_cycle_ref = ' . $this->situation_cycle_ref; - $sql .= ' and situation_counter < ' . $this->situation_counter; + $sql .= ' WHERE situation_cycle_ref = ' . $this->situation_cycle_ref; + $sql .= ' AND situation_counter < ' . $this->situation_counter; $sql .= ' AND entity = '. ($this->entity > 0 ? $this->entity : $conf->entity); $resql = $this->db->query($sql); $res = array(); @@ -4304,7 +4307,9 @@ class Facture extends CommonInvoice if (!empty($this->situation_cycle_ref)) { // No point in testing anything if we're not inside a cycle - $sql = 'SELECT max(situation_counter) FROM ' . MAIN_DB_PREFIX . 'facture WHERE situation_cycle_ref = ' . $this->situation_cycle_ref . ' AND entity = ' . ($this->entity > 0 ? $this->entity : $conf->entity); + $sql = 'SELECT max(situation_counter) FROM ' . MAIN_DB_PREFIX . 'facture'; + $sql.= ' WHERE situation_cycle_ref = ' . $this->situation_cycle_ref; + $sql.= ' AND entity = ' . ($this->entity > 0 ? $this->entity : $conf->entity); $resql = $this->db->query($sql); if ($resql && $resql->num_rows > 0) { From b0042995ac7fb8bf00d23033b41154d02f195f7a Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 12:04:17 +0200 Subject: [PATCH 035/798] FIX add docs --- htdocs/core/lib/functions.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index de52d3a74d1..69fde6369e6 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -75,7 +75,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port) * @param int $shared 0=Return id of current entity only, * 1=Return id of current entity + shared entities (default) * @param object $currentobject Current object if needed - * @return mixed Entity id(s) to use + * @return mixed Entity id(s) to use ( eg. entity IN ('.getEntity(elementname).')' ) */ function getEntity($element, $shared = 1, $currentobject = null) { @@ -96,10 +96,10 @@ function getEntity($element, $shared = 1, $currentobject = null) } /** - * Get entity id to use when to create an object + * Set entity id to use when to create an object * * @param object $currentobject Current object - * @return mixed Entity id to use + * @return mixed Entity id to use ( eg. entity = '.getEntity($object) ) */ function setEntity($currentobject) { From e5e611154436f64b8b43d1d237a1ec76ff97c0b5 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 12:05:58 +0200 Subject: [PATCH 036/798] FIX wrong function name --- 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 69fde6369e6..978c360f60d 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -99,7 +99,7 @@ function getEntity($element, $shared = 1, $currentobject = null) * Set entity id to use when to create an object * * @param object $currentobject Current object - * @return mixed Entity id to use ( eg. entity = '.getEntity($object) ) + * @return mixed Entity id to use ( eg. entity = '.setEntity($object) ) */ function setEntity($currentobject) { 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 037/798] 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 a83e7f3665ef09ebb8fa443e731f47867812c11a Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 24 Jun 2019 12:00:55 +0200 Subject: [PATCH 038/798] Add retained warranty to PDF --- htdocs/compta/facture/class/facture.class.php | 2 +- htdocs/core/lib/pdf.lib.php | 47 ++++ .../facture/doc/pdf_sponge.modules.php | 246 +++++++++++++++++- 3 files changed, 286 insertions(+), 9 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 43bdacdc514..b10b4183223 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1698,7 +1698,7 @@ class Facture extends CommonInvoice $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").","; $sql.= " situation_cycle_ref=".(empty($this->situation_cycle_ref)?"null":$this->db->escape($this->situation_cycle_ref)).","; $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; - $sql.= " situation_final=".(empty($this->situation_final)?"0":$this->db->escape($this->situation_final)); + $sql.= " situation_final=".(empty($this->situation_final)?"0":$this->db->escape($this->situation_final)).","; $sql.= " retained_warranty=".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)).","; $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null').","; $sql.= " retained_warranty_fk_cond_reglement=".(isset($this->retained_warranty_fk_cond_reglement)?intval($this->retained_warranty_fk_cond_reglement):"null"); diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 56ca215e118..05f9cb78ca4 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2206,3 +2206,50 @@ function pdf_getSizeForImage($realpath) } return array('width'=>$width,'height'=>$height); } + +/** + * Return line total amount discount + * + * @param Object $object Object + * @param int $i Current line number + * @param Translate $outputlangs Object langs for output + * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) + * @return string Return total of line excl tax + */ + +function pdf_getLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) +{ + global $conf, $hookmanager; + $sign=1; + if (isset($object->type) && $object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1; + if ($object->lines[$i]->special_code == 3) + { + return $outputlangs->transnoentities("Option"); + } + else + { + + if (is_object($hookmanager)) + { + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + + $parameters = array( + 'i'=>$i, + 'outputlangs'=>$outputlangs, + 'hidedetails'=>$hidedetails, + 'special_code'=>$special_code + ); + + $action=''; + + if( $hookmanager->executeHooks('getlinetotalremise',$parameters,$object,$action)>0) + { + return $hookmanager->resPrint; // Note that $action and $object may have been modified by some hooks + } + } + + if (empty($hidedetails) || $hidedetails > 1) return $sign * ( ($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht ); + } + return ''; +} \ No newline at end of file diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 9c7c7797841..9a5a3a371f6 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1225,13 +1225,174 @@ class pdf_sponge extends ModelePDFFactures $useborder=0; $index = 0; + + + // pourcentage global d'avancement + $percent = 0; + $i=0; + foreach ($object->lines as $line) + { + if(!class_exists('TSubtotal') || !TSubtotal::isModSubtotalLine($line)){ + $percent += $line->situation_percent; + $i++; + } + } + if(!empty($i)){ + $avancementGlobal = $percent/$i; + } + else{ + $avancementGlobal = 0; + } + + $object->fetchPreviousNextSituationInvoice(); + $TPreviousIncoice = $object->tab_previous_situation_invoice; + + $total_a_payer = 0; + $total_a_payer_ttc = 0; + foreach ($TPreviousIncoice as &$fac){ + $total_a_payer += $fac->total_ht; + $total_a_payer_ttc += $fac->total_ttc; + } + $total_a_payer += $object->total_ht; + $total_a_payer_ttc += $object->total_ttc; + + if(!empty($avancementGlobal)){ + $total_a_payer = $total_a_payer * 100 / $avancementGlobal; + $total_a_payer_ttc = $total_a_payer_ttc * 100 / $avancementGlobal; + } + else{ + $total_a_payer = 0; + $total_a_payer_ttc = 0; + } + + $deja_paye = 0; + $i = 1; + if(!empty($TPreviousIncoice)){ + + $pdf->setY($tab2_top); + $posy = $pdf->GetY(); + + + + + foreach ($TPreviousIncoice as &$fac){ + + if($posy > $this->page_hauteur - 4 ) { + $this->_pagefoot($pdf,$object,$outputlangs,1); + $pdf->addPage(); + $pdf->setY($this->marge_haute); + $posy = $pdf->GetY(); + } + + // cumul TVA précédent + $index++; + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $posy); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $fac->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); + + $pdf->SetXY($col2x,$posy); + + $facSign = ''; + if($i>1){ + $facSign = $fac->total_ht>=0?'+':''; + } + + $displayAmount = ' '.$facSign.' '.price($fac->total_ht, 0, $outputlangs); + + $pdf->MultiCell($largcol2, $tab2_hl, $displayAmount, 0, 'R', 1); + + $i++; + $deja_paye += $fac->total_ht; + $posy += $tab2_hl; + + $pdf->setY($posy); + + } + + // Display curent total + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $posy); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $object->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); + + $pdf->SetXY($col2x,$posy); + $facSign = ''; + if($i>1){ + $facSign = $object->total_ht>=0?'+':''; // gestion d'un cas particulier client + } + + if($fac->type === facture::TYPE_CREDIT_NOTE){ + $facSign = '-'; // les avoirs + } + + + $displayAmount = ' '.$facSign.' '.price($object->total_ht, 0, $outputlangs); + $pdf->MultiCell($largcol2, $tab2_hl, $displayAmount, 0, 'R', 1); + + $posy += $tab2_hl; + + // Display all total + $pdf->SetFont('','', $default_font_size - 1); + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $posy); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("SituationTotalProgress", $avancementGlobal), 0, 'L', 1); + + $pdf->SetXY($col2x,$posy); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_a_payer*$avancementGlobal/100, 0, $outputlangs), 0, 'R', 1); + $pdf->SetFont('','', $default_font_size - 2); + + $posy += $tab2_hl; + + if($posy > $this->page_hauteur - 4 ) { + $pdf->addPage(); + $pdf->setY($this->marge_haute); + $posy = $pdf->GetY(); + } + + $tab2_top = $posy; + $index=0; + + } + + $tab2_top += 3; + + // Get Total HT + $total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht); + + // Total remise + $total_line_remise=0; + foreach($object->lines as $i => $line) { + $total_line_remise+= pdf_getLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib + // Gestion remise sous forme de ligne négative + if($line->total_ht < 0) $total_line_remise += -$line->total_ht; + } + if($total_line_remise > 0) { + if (! empty($conf->global->MAIN_SHOW_AMOUNT_DISCOUNT)) { + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + $tab2_hl); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalDiscount"), 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_line_remise, 0, $outputlangs), 0, 'R', 1); + + $index++; + } + // Show total NET before discount + if (! empty($conf->global->MAIN_SHOW_AMOUNT_BEFORE_DISCOUNT)) { + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + 0); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHTBeforeDiscount"), 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + 0); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_line_remise + $total_ht, 0, $outputlangs), 0, 'R', 1); + + $index++; + } + } + // Total HT - $pdf->SetFillColor(255, 255, 255); - $pdf->SetXY($col1x, $tab2_top + 0); + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - $total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht); - $pdf->SetXY($col2x, $tab2_top + 0); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($sign * ($total_ht + (! empty($object->remise)?$object->remise:0)), 0, $outputlangs), 0, 'R', 1); // Show VAT by rates and total @@ -1330,7 +1491,14 @@ class pdf_sponge extends ModelePDFFactures } if($sum_pdf_tva!=$object->total_tva) { // apply coef to recover the VAT object amount (the good one) - $coef_fix_tva = $object->total_tva / $sum_pdf_tva; + if(!empty($sum_pdf_tva)) + { + $coef_fix_tva = $object->total_tva / $sum_pdf_tva; + } + else { + $coef_fix_tva = 1; + } + foreach($this->tva as $tvakey => $tvaval) { $this->tva[$tvakey]=$tvaval * $coef_fix_tva; @@ -1427,7 +1595,7 @@ class pdf_sponge extends ModelePDFFactures } } } - //} + // Revenue stamp if (price2num($object->revenuestamp) != 0) @@ -1449,14 +1617,76 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($sign * $total_ttc, 0, $outputlangs), $useborder, 'R', 1); + + + /*if($object->type == Facture::TYPE_SITUATION) + { + // reste à payer total + $index++; + + $pdf->SetFont('','', $default_font_size - 1); + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities('SituationTotalRayToRest'), 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_a_payer_ttc-$deja_paye, 0, $outputlangs), 0, 'R', 1); + }*/ + + + // Retained warranty + if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) + { + $displayWarranty = false; + // Check if this situation invoice is 100% for real + if(!empty($object->situation_final)){ + $displayWarranty = true; + } + elseif(!empty($object->lines) && $object->status == Facture::STATUS_DRAFT ){ + // $object->situation_final need validation to be done so this test is need for draft + $displayWarranty = true; + foreach( $object->lines as $i => $line ){ + if($line->product_type < 2 && $line->situation_percent < 100){ + $displayWarranty = false; + break; + } + } + } + + if($displayWarranty){ + $pdf->SetTextColor(40, 40, 40); + $pdf->SetFillColor(255, 255, 255); + + $retainedWarranty = $total_a_payer_ttc * $object->retained_warranty / 100; + $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; + + // Billed - retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFEVOLToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + + // retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $retainedWarrantyToPayOn = $outputlangs->transnoentities("PDFEVOLRetainedWarranty") . ' ('.$object->retained_warranty.'%)'; + $retainedWarrantyToPayOn.= !empty($object->retained_warranty_date_limit)?' '.$outputlangs->transnoentities("PDFEVOLtoPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; + + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + } + } } } - $pdf->SetTextColor(0, 0, 0); + $pdf->SetTextColor(0,0,0); $creditnoteamount=$object->getSumCreditNotesUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); $depositsamount=$object->getSumDepositsUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); - //print "x".$creditnoteamount."-".$depositsamount;exit; + $resteapayer = price2num($total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 'MT'); if ($object->paye) $resteapayer=0; From 9c414a7a5726bcfccc86e36fabd8f7a0d9b5e4a4 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 24 Jun 2019 12:22:33 +0200 Subject: [PATCH 039/798] Change function to camel case --- htdocs/core/lib/pdf.lib.php | 2 +- htdocs/core/modules/facture/doc/pdf_sponge.modules.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 05f9cb78ca4..a4954c07f39 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2217,7 +2217,7 @@ function pdf_getSizeForImage($realpath) * @return string Return total of line excl tax */ -function pdf_getLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) +function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) { global $conf, $hookmanager; $sign=1; diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 9a5a3a371f6..0e5f9a69819 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1361,7 +1361,7 @@ class pdf_sponge extends ModelePDFFactures // Total remise $total_line_remise=0; foreach($object->lines as $i => $line) { - $total_line_remise+= pdf_getLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib + $total_line_remise+= pdfGetLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib // Gestion remise sous forme de ligne négative if($line->total_ht < 0) $total_line_remise += -$line->total_ht; } From ec7446762c7c20be0d3a3d7fc26a373fe10d3864 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 24 Jun 2019 14:36:06 +0200 Subject: [PATCH 040/798] Fix travis --- htdocs/compta/facture/card.php | 9 +++--- htdocs/compta/facture/class/facture.class.php | 18 +++++------ htdocs/compta/facture/list.php | 2 +- htdocs/core/class/commonobject.class.php | 2 +- htdocs/core/lib/pdf.lib.php | 7 ++--- .../modules/facture/doc/pdf_crabe.modules.php | 12 ++++---- .../facture/doc/pdf_sponge.modules.php | 30 +++++++++---------- 7 files changed, 40 insertions(+), 40 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 5a987c4b542..e105535ee89 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4102,7 +4102,7 @@ elseif ($id > 0 || ! empty($ref)) // Check if this situation invoice is 100% for real if(!empty($object->situation_final) && !empty($object->lines)){ $displayWarranty = true; - foreach( $object->lines as $i => $line ){ + foreach($object->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -4136,7 +4136,7 @@ elseif ($id > 0 || ! empty($ref)) { print price($object->retained_warranty).'%'; } - print ''; + print ''; // Retained warranty payment term print ''; @@ -4174,7 +4174,7 @@ elseif ($id > 0 || ! empty($ref)) print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle" '); } } - print ''; + print ''; @@ -4203,7 +4203,7 @@ elseif ($id > 0 || ! empty($ref)) print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; } @@ -4213,7 +4213,6 @@ elseif ($id > 0 || ! empty($ref)) } print ''; } - } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index b10b4183223..a19843452b8 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4387,8 +4387,8 @@ class Facture extends CommonInvoice /** * @return number or -1 if not available */ - function getRetainedWarrantyAmount() { - + public function getRetainedWarrantyAmount() + { if(empty($this->retained_warranty) ){ return -1; } @@ -4401,11 +4401,11 @@ class Facture extends CommonInvoice $displayWarranty = true; // Check if this situation invoice is 100% for real if(!empty($this->lines)){ - foreach( $this->lines as $i => $line ){ + foreach($this->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; - } + } } } @@ -4425,7 +4425,6 @@ class Facture extends CommonInvoice else{ return -1; } - } else { @@ -4442,7 +4441,7 @@ class Facture extends CommonInvoice * @param float $value value of retained warranty * @return int >0 if OK, <0 if KO */ - function setRetainedWarranty($value) + public function setRetainedWarranty($value) { dol_syslog(get_class($this).'::setRetainedWarranty('.$value.')'); if ($this->statut >= 0) @@ -4476,17 +4475,18 @@ class Facture extends CommonInvoice /** * Change the retained_warranty_date_limit * - * @param timestamp $value value of retained warranty + * @param int $timestamp date limit of retained warranty in timestamp format + * @param string $dateYmd date limit of retained warranty in Y m d format * @return int >0 if OK, <0 if KO */ - function setRetainedWarrantyDateLimit($timestamp,$dateYmd=false) + public function setRetainedWarrantyDateLimit($timestamp, $dateYmd = false) { if(!$timestamp && $dateYmd){ $timestamp = $this->db->jdate($dateYmd); } - dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$value.')'); + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$timestamp.')'); if ($this->statut >= 0) { $fieldname = 'retained_warranty_date_limit'; diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index d586125785a..01693645435 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -916,7 +916,7 @@ if ($resql) if (! empty($arrayfields['f.total_localtax1']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax1']['label'], $_SERVER['PHP_SELF'], 'f.localtax1', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['f.total_localtax2']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax2']['label'], $_SERVER['PHP_SELF'], 'f.localtax2', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['f.total_ttc']['checked'])) print_liste_field_titre($arrayfields['f.total_ttc']['label'], $_SERVER['PHP_SELF'], 'f.total_ttc', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['f.retained_warranty']['checked'])) print_liste_field_titre($arrayfields['f.retained_warranty']['label'],$_SERVER['PHP_SELF'],'','',$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['f.retained_warranty']['checked'])) print_liste_field_titre($arrayfields['f.retained_warranty']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'align="right"', $sortfield, $sortorder); if (! empty($arrayfields['dynamount_payed']['checked'])) print_liste_field_titre($arrayfields['dynamount_payed']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['rtp']['checked'])) print_liste_field_titre($arrayfields['rtp']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); // Extra fields diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index d6d82f5c363..92234a31301 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2059,7 +2059,7 @@ abstract class CommonObject * @param int $id Id of new payment terms * @return int >0 if OK, <0 if KO */ - function setRetainedWarrantyPaymentTerms($id) + public function setRetainedWarrantyPaymentTerms($id) { dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms('.$id.')'); if ($this->statut >= 0 || $this->element == 'societe') diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index a4954c07f39..3e792035e5b 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2216,8 +2216,7 @@ function pdf_getSizeForImage($realpath) * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) * @return string Return total of line excl tax */ - -function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) +function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails = 0) { global $conf, $hookmanager; $sign=1; @@ -2243,7 +2242,7 @@ function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0 $action=''; - if( $hookmanager->executeHooks('getlinetotalremise',$parameters,$object,$action)>0) + if( $hookmanager->executeHooks('getlinetotalremise', $parameters, $object, $action)>0) { return $hookmanager->resPrint; // Note that $action and $object may have been modified by some hooks } @@ -2252,4 +2251,4 @@ function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0 if (empty($hidedetails) || $hidedetails > 1) return $sign * ( ($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht ); } return ''; -} \ No newline at end of file +} diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index e5c5b64e809..7922f96d94f 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1349,10 +1349,12 @@ class pdf_crabe extends ModelePDFFactures // Retained warranty if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) { + $displayWarranty = false; + // Check if this situation invoice is 100% for real if(!empty($object->lines)){ $displayWarranty = true; - foreach( $object->lines as $i => $line ){ + foreach($object->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -1361,8 +1363,8 @@ class pdf_crabe extends ModelePDFFactures } if($displayWarranty){ - $pdf->SetTextColor(40,40,40); - $pdf->SetFillColor(255,255,255); + $pdf->SetTextColor(40, 40, 40); + $pdf->SetFillColor(255, 255, 255); $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; @@ -1373,7 +1375,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("ToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty), $useborder, 'R', 1); // retained warranty $index++; @@ -1384,7 +1386,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty), $useborder, 'R', 1); } } diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 0e5f9a69819..1e16c4439dd 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1278,7 +1278,7 @@ class pdf_sponge extends ModelePDFFactures foreach ($TPreviousIncoice as &$fac){ if($posy > $this->page_hauteur - 4 ) { - $this->_pagefoot($pdf,$object,$outputlangs,1); + $this->_pagefoot($pdf, $object, $outputlangs, 1); $pdf->addPage(); $pdf->setY($this->marge_haute); $posy = $pdf->GetY(); @@ -1286,11 +1286,11 @@ class pdf_sponge extends ModelePDFFactures // cumul TVA précédent $index++; - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $fac->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - $pdf->SetXY($col2x,$posy); + $pdf->SetXY($col2x, $posy); $facSign = ''; if($i>1){ @@ -1306,15 +1306,14 @@ class pdf_sponge extends ModelePDFFactures $posy += $tab2_hl; $pdf->setY($posy); - } // Display curent total - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $object->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - $pdf->SetXY($col2x,$posy); + $pdf->SetXY($col2x, $posy); $facSign = ''; if($i>1){ $facSign = $object->total_ht>=0?'+':''; // gestion d'un cas particulier client @@ -1332,7 +1331,7 @@ class pdf_sponge extends ModelePDFFactures // Display all total $pdf->SetFont('','', $default_font_size - 1); - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("SituationTotalProgress", $avancementGlobal), 0, 'L', 1); @@ -1367,7 +1366,7 @@ class pdf_sponge extends ModelePDFFactures } if($total_line_remise > 0) { if (! empty($conf->global->MAIN_SHOW_AMOUNT_DISCOUNT)) { - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + $tab2_hl); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalDiscount"), 0, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl); @@ -1377,7 +1376,7 @@ class pdf_sponge extends ModelePDFFactures } // Show total NET before discount if (! empty($conf->global->MAIN_SHOW_AMOUNT_BEFORE_DISCOUNT)) { - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + 0); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHTBeforeDiscount"), 0, 'L', 1); $pdf->SetXY($col2x, $tab2_top + 0); @@ -1388,7 +1387,7 @@ class pdf_sponge extends ModelePDFFactures } // Total HT - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1); @@ -1417,7 +1416,7 @@ class pdf_sponge extends ModelePDFFactures //{ foreach($this->localtax1 as $localtax_type => $localtax_rate) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; + if (in_array((string) $localtax_type, array('1', '3', '5'))) continue; foreach($localtax_rate as $tvakey => $tvaval) { @@ -1637,6 +1636,7 @@ class pdf_sponge extends ModelePDFFactures if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) { $displayWarranty = false; + // Check if this situation invoice is 100% for real if(!empty($object->situation_final)){ $displayWarranty = true; @@ -1644,7 +1644,7 @@ class pdf_sponge extends ModelePDFFactures elseif(!empty($object->lines) && $object->status == Facture::STATUS_DRAFT ){ // $object->situation_final need validation to be done so this test is need for draft $displayWarranty = true; - foreach( $object->lines as $i => $line ){ + foreach($object->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -1665,7 +1665,7 @@ class pdf_sponge extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFEVOLToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty), $useborder, 'R', 1); // retained warranty $index++; @@ -1676,13 +1676,13 @@ class pdf_sponge extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty), $useborder, 'R', 1); } } } } - $pdf->SetTextColor(0,0,0); + $pdf->SetTextColor(0, 0, 0); $creditnoteamount=$object->getSumCreditNotesUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); $depositsamount=$object->getSumDepositsUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); From 6b165d4a1544b2c6d594533eb4df82fffea3730f Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 25 Jun 2019 09:07:04 +0200 Subject: [PATCH 041/798] Fix function name and doc --- htdocs/admin/facture_situation.php | 33 ++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index dc3ec771b16..9b275944e3a 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -85,9 +85,9 @@ _updateBtn(); print ''; -_print_on_off('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); -_print_on_off('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); -_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); +_printOnOff('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); +_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); +_printOnOff('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); $metas = array( 'type' => 'number', @@ -95,7 +95,7 @@ $metas = array( 'min' => 0, 'max' => 100 ); -_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); +_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); @@ -123,6 +123,10 @@ dol_fiche_end(); llxFooter(); $db->close(); +/** + * print an update button + * @return void + */ function _updateBtn(){ global $langs; print '
'; @@ -130,7 +134,14 @@ function _updateBtn(){ print '
'; } -function _print_on_off($confkey, $title = false, $desc ='') +/** + * Print a On/Off button + * @param $confkey + * @param bool $title + * @param string $desc + * @return void + */ +function _printOnOff($confkey, $title = false, $desc ='') { global $var, $bc, $langs; $var=!$var; @@ -148,7 +159,17 @@ function _print_on_off($confkey, $title = false, $desc ='') } -function _print_input_form_part($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) +/** + * Print a form part + * @param $confkey + * @param bool $title + * @param string $desc + * @param array $metas + * @param string $type + * @param bool $help + * @return void + */ +function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) { global $var, $bc, $langs, $conf, $db, $inputCount; $var=!$var; From 4c4444a53f1399410eb13077cf9c465c370b85ce Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 09:36:53 +0200 Subject: [PATCH 042/798] fix travis recommendations --- .../modules/facture/doc/pdf_crabe.modules.php | 3 +-- .../modules/facture/doc/pdf_sponge.modules.php | 16 ++++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 7922f96d94f..f30193b3a9e 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1359,7 +1359,7 @@ class pdf_crabe extends ModelePDFFactures $displayWarranty = false; break; } - } + } } if($displayWarranty){ @@ -1389,7 +1389,6 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty), $useborder, 'R', 1); } } - } } diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 1e16c4439dd..ed18eb1b954 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1330,14 +1330,14 @@ class pdf_sponge extends ModelePDFFactures $posy += $tab2_hl; // Display all total - $pdf->SetFont('','', $default_font_size - 1); + $pdf->SetFont('', '', $default_font_size - 1); $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("SituationTotalProgress", $avancementGlobal), 0, 'L', 1); - $pdf->SetXY($col2x,$posy); + $pdf->SetXY($col2x, $posy); $pdf->MultiCell($largcol2, $tab2_hl, price($total_a_payer*$avancementGlobal/100, 0, $outputlangs), 0, 'R', 1); - $pdf->SetFont('','', $default_font_size - 2); + $pdf->SetFont('', '', $default_font_size - 2); $posy += $tab2_hl; @@ -1349,7 +1349,6 @@ class pdf_sponge extends ModelePDFFactures $tab2_top = $posy; $index=0; - } $tab2_top += 3; @@ -1360,7 +1359,7 @@ class pdf_sponge extends ModelePDFFactures // Total remise $total_line_remise=0; foreach($object->lines as $i => $line) { - $total_line_remise+= pdfGetLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib + $total_line_remise+= pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, 2); // TODO: add this methode to core/lib/pdf.lib // Gestion remise sous forme de ligne négative if($line->total_ht < 0) $total_line_remise += -$line->total_ht; } @@ -1648,7 +1647,7 @@ class pdf_sponge extends ModelePDFFactures if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; - } + } } } @@ -1739,6 +1738,11 @@ class pdf_sponge extends ModelePDFFactures return ($tab2_top + ($tab2_hl * $index)); } + public static function liste_modeles($db, $maxfilenamelength = 0) + { + return parent::liste_modeles($db, $maxfilenamelength); // TODO: Change the autogenerated stub + } + /** * Show table for lines * From ee98f3e6d79b7af29bfb64688041e7a7d9a8d0c3 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 10:48:22 +0200 Subject: [PATCH 043/798] fix travis recommendations --- htdocs/admin/facture_situation.php | 46 +++++++++---------- htdocs/compta/facture/card.php | 1 - htdocs/compta/facture/class/facture.class.php | 2 +- .../modules/facture/doc/pdf_crabe.modules.php | 2 +- .../facture/doc/pdf_sponge.modules.php | 11 ++++- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index 9b275944e3a..a63233329f3 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -38,10 +38,10 @@ $langs->loadLangs(array('admin', 'errors', 'other', 'bills')); if (! $user->admin) accessforbidden(); -$action = GETPOST('action','alpha'); -$value = GETPOST('value','alpha'); -$label = GETPOST('label','alpha'); -$scandir = GETPOST('scan_dir','alpha'); +$action = GETPOST('action', 'alpha'); +$value = GETPOST('value', 'alpha'); +$label = GETPOST('label', 'alpha'); +$scandir = GETPOST('scan_dir', 'alpha'); $type='invoice'; @@ -57,15 +57,15 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; * View */ -$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); +$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); -llxHeader("",$langs->trans("BillsSetup"),'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); +llxHeader("", $langs->trans("BillsSetup"), 'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); $form=new Form($db); $linkback=''.$langs->trans("BackToModuleList").''; -print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); +print load_fiche_titre($langs->trans("BillsSetup"), $linkback, 'title_setup'); $head = invoice_admin_prepare_head(); dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoice'); @@ -74,7 +74,7 @@ dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoi * Numbering module */ -print load_fiche_titre($langs->trans("InvoiceSituation"),'',''); +print load_fiche_titre($langs->trans("InvoiceSituation"), '', ''); $var=0; print '
'; @@ -85,9 +85,9 @@ _updateBtn(); print '
'; -_printOnOff('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); -_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); -_printOnOff('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); +_printOnOff('INVOICE_USE_SITUATION', $langs->trans('UseSituationInvoices')); +_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE', $langs->trans('UseSituationInvoicesCreditNote')); +_printOnOff('INVOICE_USE_SITUATION_RETAINED_WARRANTY', $langs->trans('Retainedwarranty')); $metas = array( 'type' => 'number', @@ -95,7 +95,7 @@ $metas = array( 'min' => 0, 'max' => 100 ); -_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); +_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT', $langs->trans('RetainedwarrantyDefaultPercent'), '', $metas); @@ -136,12 +136,12 @@ function _updateBtn(){ /** * Print a On/Off button - * @param $confkey - * @param bool $title - * @param string $desc + * @param string $confkey the conf key + * @param bool $title Title of conf + * @param string $desc Description of * @return void */ -function _printOnOff($confkey, $title = false, $desc ='') +function _printOnOff($confkey, $title = false, $desc = '') { global $var, $bc, $langs; $var=!$var; @@ -161,11 +161,11 @@ function _printOnOff($confkey, $title = false, $desc ='') /** * Print a form part - * @param $confkey - * @param bool $title - * @param string $desc - * @param array $metas - * @param string $type + * @param string $confkey the conf key + * @param bool $title Title of conf + * @param string $desc Description of + * @param array $metas html meta + * @param string $type type of input textarea or input * @param bool $help * @return void */ @@ -186,7 +186,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array } - $metas = array_merge ($defaultMetas, $metas); + $metas = array_merge($defaultMetas, $metas); $metascompil = ''; foreach ($metas as $key => $values) { @@ -197,7 +197,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array print ''; - } } else // Credit note diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 8c8fd3365ca..c6b83793f77 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4409,7 +4409,7 @@ class Facture extends CommonInvoice $displayWarranty = true; // Check if this situation invoice is 100% for real if(!empty($this->lines)){ - foreach($this->lines as $i => $line ){ + foreach($this->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index f30193b3a9e..8cac32d1f2d 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1354,7 +1354,7 @@ class pdf_crabe extends ModelePDFFactures // Check if this situation invoice is 100% for real if(!empty($object->lines)){ $displayWarranty = true; - foreach($object->lines as $i => $line ){ + foreach($object->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index ed18eb1b954..2a1b0516112 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1643,7 +1643,7 @@ class pdf_sponge extends ModelePDFFactures elseif(!empty($object->lines) && $object->status == Facture::STATUS_DRAFT ){ // $object->situation_final need validation to be done so this test is need for draft $displayWarranty = true; - foreach($object->lines as $i => $line ){ + foreach($object->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -1738,8 +1738,17 @@ class pdf_sponge extends ModelePDFFactures return ($tab2_top + ($tab2_hl * $index)); } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return list of active generation modules + * + * @param DoliDB $db Database handler + * @param integer $maxfilenamelength Max length of value to show + * @return array List of templates + */ public static function liste_modeles($db, $maxfilenamelength = 0) { + // phpcs:enable return parent::liste_modeles($db, $maxfilenamelength); // TODO: Change the autogenerated stub } From a8157f865efe258abdef80d6bf4300e9836c2697 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 11:59:35 +0200 Subject: [PATCH 044/798] fix travis recommendations --- htdocs/admin/facture_situation.php | 44 ++++++++++++++++-------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index a63233329f3..c6fcf57ea22 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -59,7 +59,10 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; $dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); -llxHeader("", $langs->trans("BillsSetup"), 'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); +llxHeader( + "", $langs->trans("BillsSetup"), + 'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura' +); $form=new Form($db); @@ -124,10 +127,12 @@ llxFooter(); $db->close(); /** - * print an update button + * Print an update button + * * @return void */ -function _updateBtn(){ +function _updateBtn() +{ global $langs; print '
'; print ''; @@ -136,9 +141,11 @@ function _updateBtn(){ /** * Print a On/Off button + * * @param string $confkey the conf key - * @param bool $title Title of conf - * @param string $desc Description of + * @param bool $title Title of conf + * @param string $desc Description + * * @return void */ function _printOnOff($confkey, $title = false, $desc = '') @@ -147,8 +154,7 @@ function _printOnOff($confkey, $title = false, $desc = '') $var=!$var; print '
'; print ''; @@ -161,12 +167,14 @@ function _printOnOff($confkey, $title = false, $desc = '') /** * Print a form part + * * @param string $confkey the conf key - * @param bool $title Title of conf - * @param string $desc Description of - * @param array $metas html meta - * @param string $type type of input textarea or input - * @param bool $help + * @param bool $title Title of conf + * @param string $desc Description of + * @param array $metas html meta + * @param string $type type of input textarea or input + * @param bool $help help description + * * @return void */ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) @@ -188,8 +196,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array $metas = array_merge($defaultMetas, $metas); $metascompil = ''; - foreach ($metas as $key => $values) - { + foreach ($metas as $key => $values){ $metascompil .= ' '.$key.'="'.$values.'" '; } @@ -198,13 +205,11 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array if(!empty($help)){ print $form->textwithtooltip(($title?$title:$langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, '')); - } - else { + }else{ print $title?$title:$langs->trans($confkey); } - if(!empty($desc)) - { + if(!empty($desc)){ print '
'.$langs->trans($desc).''; } @@ -216,8 +221,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array print ''; if($type=='textarea'){ print ''; - } - else { + }else{ print ''; } print ''; From 8b7c260180edbba3324cbd3cc6472c5e16ba018d Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 12:13:52 +0200 Subject: [PATCH 045/798] fix travis recommendations --- htdocs/admin/facture_situation.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index c6fcf57ea22..4907aaf2fea 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -107,8 +107,8 @@ _printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT', $lang $inputCount = empty($inputCount)?1:($inputCount+1); print ''; print ''; -print ''; -print ''; +print ''; @@ -154,12 +154,12 @@ function _printOnOff($confkey, $title = false, $desc = '') $var=!$var; print ''; print ''; - print ''; - print ''; + print ''; } @@ -188,7 +188,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array 'name' => 'value'.$inputCount ); - if($type!='textarea'){ + if ($type!='textarea') { $defaultMetas['type'] = 'text'; $defaultMetas['value'] = $conf->global->{$confkey}; } @@ -196,32 +196,32 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array $metas = array_merge($defaultMetas, $metas); $metascompil = ''; - foreach ($metas as $key => $values){ + foreach ($metas as $key => $values) { $metascompil .= ' '.$key.'="'.$values.'" '; } print ''; print ''; - print ''; - print ''; + print ''; From 75b55ac5d6406a6559e5650e7b2fe850f2b66606 Mon Sep 17 00:00:00 2001 From: John Botella Date: Fri, 28 Jun 2019 16:10:41 +0200 Subject: [PATCH 046/798] fix travis recommendations --- htdocs/admin/facture_situation.php | 2 +- htdocs/compta/facture/card.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index 4907aaf2fea..0e62029e8f2 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -177,7 +177,7 @@ function _printOnOff($confkey, $title = false, $desc = '') * * @return void */ -function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) +function _printInputFormPart($confkey, $title = false, $desc = '', $metas = array(), $type = 'input', $help = false) { global $var, $bc, $langs, $conf, $db, $inputCount; $var=!$var; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 340527f16ae..df753c1b5ac 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -308,7 +308,7 @@ if (empty($reshook)) dol_print_error($db, $object->error); } - else if ($action == 'setretainedwarrantyconditions' && $user->rights->facture->creer) + elseif ($action == 'setretainedwarrantyconditions' && $user->rights->facture->creer) { $object->fetch($id); $object->retained_warranty_fk_cond_reglement = 0; // To clean property @@ -323,7 +323,7 @@ if (empty($reshook)) if ($result < 0) dol_print_error($db, $object->error); } - else if ($action == 'setretainedwarranty' && $user->rights->facture->creer) + elseif ($action == 'setretainedwarranty' && $user->rights->facture->creer) { $object->fetch($id); $result = $object->setRetainedWarranty(GETPOST('retained_warranty', 'float')); @@ -331,7 +331,7 @@ if (empty($reshook)) dol_print_error($db, $object->error); } - else if ($action == 'setretainedwarrantydatelimit' && $user->rights->facture->creer) + elseif ($action == 'setretainedwarrantydatelimit' && $user->rights->facture->creer) { $object->fetch($id); $result = $object->setRetainedWarrantyDateLimit(GETPOST('retained_warranty_date_limit', 'float')); From 837c1aca35fa10f88a82de5512249d297411849d Mon Sep 17 00:00:00 2001 From: Philippe GRAND Date: Sat, 29 Jun 2019 09:48:52 +0200 Subject: [PATCH 047/798] translation --- htdocs/core/modules/livraison/doc/pdf_typhon.modules.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php index a2124b801a6..997a6a7b627 100644 --- a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php +++ b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php @@ -139,9 +139,9 @@ class pdf_typhon extends ModelePDFDeliveryOrder $this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10; $this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10; - $this->option_logo = 1; // Affiche logo FAC_PDF_LOGO - $this->option_tva = 1; // Gere option tva FACTURE_TVAOPTION - $this->option_codeproduitservice = 1; // Affiche code produit-service + $this->option_logo = 1; // Display logo FAC_PDF_LOGO + $this->option_tva = 1; // Manage the vat option FACTURE_TVAOPTION + $this->option_codeproduitservice = 1; // Display product-service code $this->franchise=!$mysoc->tva_assuj; From c45b191330951781f18b5fcee91fae7b5a0755f9 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Mon, 1 Jul 2019 10:18:04 +0200 Subject: [PATCH 048/798] FIX: when STOCK_CALCULATE_ON_SHIPMENT_CLOSE is set, deleting a "closed" shipment now increases stock as expected --- htdocs/expedition/class/expedition.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 3ab96fed1fa..dd0d4842276 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1111,7 +1111,9 @@ 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) || + ($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE && $this->statut == 2))) { require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php"); From 92f6cef00f9b2f0a606291cd37564e99172e917c Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 2 Jul 2019 12:07:22 +0200 Subject: [PATCH 049/798] Fix unit test --- test/phpunit/FactureTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/phpunit/FactureTest.php b/test/phpunit/FactureTest.php index 4f680ba32db..ccc6aaeff85 100644 --- a/test/phpunit/FactureTest.php +++ b/test/phpunit/FactureTest.php @@ -232,7 +232,8 @@ class FactureTest extends PHPUnit_Framework_TestCase 'newref','oldref','id','lines','client','thirdparty','brouillon','user_author','date_creation','date_validation','datem','date_modification', 'ref','statut','paye','specimen','ref','actiontypecode','actionmsg2','actionmsg','mode_reglement','cond_reglement', 'cond_reglement_doc','situation_cycle_ref','situation_counter','situation_final','multicurrency_total_ht','multicurrency_total_tva', - 'multicurrency_total_ttc','fk_multicurrency','multicurrency_code','multicurrency_tx' + 'multicurrency_total_ttc','fk_multicurrency','multicurrency_code','multicurrency_tx', + 'retained_warranty' ,'retained_warranty_date_limit', 'retained_warranty_fk_cond_reglement' ) ); $this->assertEquals($arraywithdiff, array()); // Actual, Expected From 64d1ebf59cd6ee27117cca10fc552257d0e17ea4 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 4 Jul 2019 15:06:39 +0200 Subject: [PATCH 050/798] 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 3d076d8bf91d3b0512de2d34588144afcace2757 Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Fri, 5 Jul 2019 11:15:43 +0200 Subject: [PATCH 051/798] 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 93d9f73f1d03c7786d3927c20247cd7bcb630cbc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 17:44:31 +0200 Subject: [PATCH 052/798] 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 053/798] 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 266ed86194b0ac6be2f19d72f7613597b3cda876 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Mon, 8 Jul 2019 12:37:24 +0200 Subject: [PATCH 054/798] 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 9c47cb6f916ed057d17ed9242139b9bd4e9e2336 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Mon, 8 Jul 2019 23:16:32 +0200 Subject: [PATCH 055/798] NEW : can choose lines while creating order from origin --- htdocs/commande/card.php | 7 +++++-- htdocs/core/class/commonobject.class.php | 11 +++++++---- htdocs/core/tpl/originproductline.tpl.php | 4 ++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 7362f30e5a8..f9fd3a716f5 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -232,6 +232,7 @@ if (empty($reshook)) { $datecommande = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $datelivraison = dol_mktime(12, 0, 0, GETPOST('liv_month'), GETPOST('liv_day'), GETPOST('liv_year')); + $selectedLines = GETPOST('toselect'); if ($datecommande == '') { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentities('Date')), null, 'errors'); @@ -338,6 +339,8 @@ if (empty($reshook)) for($i = 0; $i < $num; $i ++) { + if(!in_array($lines[$i]->id, $selectedLines)) continue; // Skip unselected lines + $label = (! empty($lines[$i]->label) ? $lines[$i]->label : ''); $desc = (! empty($lines[$i]->desc) ? $lines[$i]->desc : ''); $product_type = (! empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0); @@ -1870,8 +1873,6 @@ if ($action == 'create' && $user->rights->commande->creer) print ''; print ''; - print ''; - // Show origin lines if (! empty($origin) && ! empty($originid) && is_object($objectsrc)) { $title = $langs->trans('ProductsAndServices'); @@ -1883,6 +1884,8 @@ if ($action == 'create' && $user->rights->commande->creer) print '
'; if(!empty($help)){ - print $form->textwithtooltip( ($title?$title:$langs->trans($confkey)) , $langs->trans($help),2,1,img_help(1,'')); + print $form->textwithtooltip(($title?$title:$langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, '')); } else { print $title?$title:$langs->trans($confkey); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 169577a2c1e..340527f16ae 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4684,7 +4684,6 @@ elseif ($id > 0 || ! empty($ref)) print $langs->trans("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; print ' :' . price($retainedWarranty) . ' 
'.($title?$title:$langs->trans($confkey)); - if(!empty($desc)) - { + if(!empty($desc)){ print '
'.$langs->trans($desc).''; } print '
'.$langs->trans('PaymentConditionsShortRetainedWarranty').' '; +print ' '; print ''; $form->select_conditions_paiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'value'.$inputCount, -1, 1); print '
'.($title?$title:$langs->trans($confkey)); - if(!empty($desc)){ + if (!empty($desc)) { print '
'.$langs->trans($desc).''; } print '
 '; + print ' '; print ajax_constantonoff($confkey); print '
'; - if(!empty($help)){ + if (!empty($help)) { print $form->textwithtooltip(($title?$title:$langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, '')); - }else{ + } else { print $title?$title:$langs->trans($confkey); } - if(!empty($desc)){ + if (!empty($desc)) { print '
'.$langs->trans($desc).''; } print '
 '; + print ' '; print ''; print ''; - if($type=='textarea'){ + if ($type=='textarea') { print ''; - }else{ + } else { print ''; } print '
'; } + + print ''; } else { // Mode view $now = dol_now(); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 0a300476fb5..f3832ff2782 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4145,7 +4145,7 @@ abstract class CommonObject */ public function printOriginLinesList($restrictlist = '') { - global $langs, $hookmanager, $conf; + global $langs, $hookmanager, $conf, $form; print ''; print ''.$langs->trans('Ref').''; @@ -4158,8 +4158,9 @@ abstract class CommonObject { print ''.$langs->trans('Unit').''; } - print ''.$langs->trans('ReductionShort').''; - + print ''.$langs->trans('ReductionShort').''; + print ''.$form->showCheckAddButtons('checkforselect', 1).''; + print ''; $var = true; $i = 0; @@ -4200,7 +4201,7 @@ abstract class CommonObject */ public function printOriginLine($line, $var, $restrictlist = '', $defaulttpldir = '/core/tpl') { - global $langs, $conf; + global $langs, $conf, $selectedLines; //var_dump($line); if (!empty($line->date_start)) @@ -4222,6 +4223,8 @@ abstract class CommonObject if ($line->date_fin_reel) $date_end=$line->date_fin_reel; } + $this->tpl['id'] = $line->id; + $this->tpl['label'] = ''; if (! empty($line->fk_parent_line)) $this->tpl['label'].= img_picto('', 'rightarrow'); diff --git a/htdocs/core/tpl/originproductline.tpl.php b/htdocs/core/tpl/originproductline.tpl.php index 2f0accd6306..e29ea678282 100644 --- a/htdocs/core/tpl/originproductline.tpl.php +++ b/htdocs/core/tpl/originproductline.tpl.php @@ -40,6 +40,10 @@ if($conf->global->PRODUCT_USE_UNITS) print ''.$langs->trans($this->tpl['unit']).''; print ''.$this->tpl['remise_percent'].''; + +$selected=1; +if (!empty($selectedLines) && !in_array($this->tpl['id'], $selectedLines)) $selected=0; +print ''; print ''."\n"; ?> From e5d34de877fe194c096fa83b5cb62f5b10aded42 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 9 Jul 2019 00:14:01 +0200 Subject: [PATCH 056/798] 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 057/798] 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 058/798] 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 059/798] 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 060/798] 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 061/798] 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 ''; From a3f5397988c7437e34d1435ff86feec19104e0e6 Mon Sep 17 00:00:00 2001 From: atm-lena Date: Wed, 10 Jul 2019 15:55:50 +0200 Subject: [PATCH 062/798] 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 ''; 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 ''; print ''; From cce8f98afc7638becb92e2a4e9344c7de40c2b21 Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 10 Jul 2019 16:33:03 +0200 Subject: [PATCH 063/798] 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 064/798] 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 065/798] 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 066/798] 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 067/798] 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 ''; 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 068/798] 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 069/798] 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 070/798] 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 071/798] 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 072/798] 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 073/798] 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 074/798] 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 075/798] 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 076/798] 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 077/798] 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 078/798] 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 ''; $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 "\n"; @@ -292,6 +337,16 @@ if ($resql) print ''.(isset($objp->unitprice) ? price($objp->unitprice) : '').''; + // 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 079/798] # 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 '' . $langs->trans("QtyToDispatchShort") . ''; print ''; print '' . $langs->trans("Warehouse") . ''; + + // 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 ''; $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 "\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 080/798] 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 081/798] 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 082/798] 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 '' . $obj->description . ''; // 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 '' . nl2br(dol_trunc($obj->description, $trunclengh)) . ''; + print '' . nl2br(dol_trunc($obj->description, $trunclengh)) . ''; } 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 083/798] 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 ''; - if ($filterfound) - { - $searchpicto=$form->showFilterAndCheckAddButtons(0); - print $searchpicto; - } + $searchpicto=$form->showFilterButtons(); + print $searchpicto; 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 084/798] 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 085/798] 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 086/798] 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 $langs->trans('ForceUpdateChildPriceSoc'); - print ''; - print ''; - print ''; - 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 ''; @@ -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 ''; + 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 087/798] 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 088/798] 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 089/798] 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 090/798] 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 091/798] 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 092/798] 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 093/798] 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 094/798] 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 095/798] 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 096/798] 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 097/798] 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 098/798] 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 099/798] 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 100/798] 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 101/798] 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 102/798] 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 121/798] 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 122/798] 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 123/798] 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 124/798] 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 125/798] 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 126/798] 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 127/798] 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 128/798] 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 7ffc46e1da538cac9b848c4702f645842e7cafce Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 19 Jul 2019 09:47:05 +0200 Subject: [PATCH 129/798] FIX When we are in update mode, so we use $this->entity --- htdocs/core/lib/functions.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index db32cc787e5..6e52660206f 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -5,7 +5,7 @@ * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Christophe Combelles - * Copyright (C) 2005-2017 Regis Houssin + * Copyright (C) 2005-2019 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2010-2018 Juanjo Menent * Copyright (C) 2013 Cédric Salvador @@ -111,7 +111,7 @@ function setEntity($currentobject) } else { - return $conf->entity; + return ((is_object($currentobject) && $currentobject->id > 0 && $currentobject->entity > 0) ? $currentobject->entity : $conf->entity); } } From f82e1f1155ec7b475810025ac79a1fa1daad1527 Mon Sep 17 00:00:00 2001 From: jcp Date: Fri, 19 Jul 2019 10:44:12 +0200 Subject: [PATCH 130/798] Fix: Use special_code=4 for Takepos --- htdocs/takepos/invoice.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 510b949b92b..79c7eee3d56 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -306,14 +306,14 @@ if ($action == "order" and $placeid != 0) $catsprinter2 = explode(';', $conf->global->TAKEPOS_PRINTED_CATEGORIES_2); foreach($invoice->lines as $line) { - if ($line->special_code == "3") { continue; + if ($line->special_code == "4") { continue; } $c = new Categorie($db); $existing = $c->containing($line->fk_product, Categorie::TYPE_PRODUCT, 'id'); $result = array_intersect($catsprinter1, $existing); $count = count($result); if ($count > 0) { - $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='3' where rowid=$line->rowid"; + $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='4' where rowid=$line->rowid"; $db->query($sql); $order_receipt_printer1.= '' . $line->product_label . '' . $line->qty; if (!empty($line->array_options['options_order_notes'])) $order_receipt_printer1.="
(".$line->array_options['options_order_notes'].")"; @@ -323,14 +323,14 @@ if ($action == "order" and $placeid != 0) foreach($invoice->lines as $line) { - if ($line->special_code == "3") { continue; + if ($line->special_code == "4") { continue; } $c = new Categorie($db); $existing = $c->containing($line->fk_product, Categorie::TYPE_PRODUCT, 'id'); $result = array_intersect($catsprinter2, $existing); $count = count($result); if ($count > 0) { - $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='3' where rowid=$line->rowid"; + $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='4' where rowid=$line->rowid"; $db->query($sql); $order_receipt_printer2.= '' . $line->product_label . '' . $line->qty; if (!empty($line->array_options['options_order_notes'])) $order_receipt_printer2.="
(".$line->array_options['options_order_notes'].")"; @@ -512,7 +512,7 @@ if ($placeid > 0) $htmlforlines = ''; $htmlforlines.= 'special_code == "4") { $htmlforlines.= ' order'; } $htmlforlines.= '" id="' . $line->id . '">'; From a03bb00254b979b9027092b7b0f1585d51efbb16 Mon Sep 17 00:00:00 2001 From: atm-ph Date: Fri, 19 Jul 2019 11:26:21 +0200 Subject: [PATCH 131/798] 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 132/798] 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 133/798] 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 134/798] 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 135/798] 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 136/798] 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').''; // Title - print ''.$langs->trans('Title').''.$langs->trans('DetailTitre').''; + print ''.$langs->trans('Title').''.$langs->trans('DetailTitre').''; // Url print ''.$langs->trans('URL').''.$langs->trans('DetailUrl').''; 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 ''; - print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->titre; + print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->title; 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 137/798] 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 138/798] 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 139/798] 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 140/798] 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 141/798] 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 142/798] 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 df733450463f4891c859c5e83654429c5e3385ff Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 19 Jul 2019 17:07:55 +0200 Subject: [PATCH 143/798] NEW Accountancy Add export model LDCompta V9 & higher --- .../class/accountancyexport.class.php | 93 ++++++++++++++++++- htdocs/langs/en_US/accountancy.lang | 1 + 2 files changed, 90 insertions(+), 4 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 3169d3737d9..1b477a57ae9 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -5,7 +5,7 @@ * Copyright (C) 2015 Florian Henry * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Pierre-Henry Favre - * Copyright (C) 2016-2018 Alexandre Spangaro + * Copyright (C) 2016-2019 Alexandre Spangaro * Copyright (C) 2013-2017 Olivier Geffroy * Copyright (C) 2017 Elarifr. Ari Elbaz * Copyright (C) 2017-2019 Frédéric France @@ -50,6 +50,7 @@ class AccountancyExport public static $EXPORT_TYPE_SAGE50_SWISS = 45; public static $EXPORT_TYPE_QUADRATUS = 60; public static $EXPORT_TYPE_OPENCONCERTO = 100; + public static $EXPORT_TYPE_LDCOMPTA = 110; public static $EXPORT_TYPE_FEC = 1000; @@ -105,6 +106,7 @@ class AccountancyExport self::$EXPORT_TYPE_AGIRIS => $langs->trans('Modelcsv_agiris'), self::$EXPORT_TYPE_OPENCONCERTO => $langs->trans('Modelcsv_openconcerto'), self::$EXPORT_TYPE_SAGE50_SWISS => $langs->trans('Modelcsv_Sage50_Swiss'), + self::$EXPORT_TYPE_LDCOMPTA => $langs->trans('Modelcsv_LDCompta'), self::$EXPORT_TYPE_FEC => $langs->trans('Modelcsv_FEC'), ); @@ -133,6 +135,7 @@ class AccountancyExport self::$EXPORT_TYPE_AGIRIS => 'agiris', self::$EXPORT_TYPE_OPENCONCERTO => 'openconcerto', self::$EXPORT_TYPE_SAGE50_SWISS => 'sage50ch', + self::$EXPORT_TYPE_LDCOMPTA => 'ldcompta', self::$EXPORT_TYPE_FEC => 'fec', ); @@ -191,6 +194,10 @@ class AccountancyExport 'label' => $langs->trans('Modelcsv_Sage50_Swiss'), 'ACCOUNTING_EXPORT_FORMAT' => 'csv', ), + self::$EXPORT_TYPE_LDCOMPTA => array( + 'label' => $langs->trans('Modelcsv_LDCompta'), + 'ACCOUNTING_EXPORT_FORMAT' => 'csv', + ), self::$EXPORT_TYPE_FEC => array( 'label' => $langs->trans('Modelcsv_FEC'), 'ACCOUNTING_EXPORT_FORMAT' => 'txt', @@ -257,12 +264,15 @@ class AccountancyExport case self::$EXPORT_TYPE_OPENCONCERTO : $this->exportOpenConcerto($TData); break; - case self::$EXPORT_TYPE_FEC : - $this->exportFEC($TData); - break; case self::$EXPORT_TYPE_SAGE50_SWISS : $this->exportSAGE50SWISS($TData); break; + case self::$EXPORT_TYPE_LDCOMPTA : + $this->exportLDCompta($TData); + break; + case self::$EXPORT_TYPE_FEC : + $this->exportFEC($TData); + break; default: $this->errors[] = $langs->trans('accountancy_error_modelnotfound'); break; @@ -909,6 +919,81 @@ class AccountancyExport } } + /** + * Export format : LD Compta version 9 & higher + * http://www.ldsysteme.fr/fileadmin/telechargement/np/ldcompta/Documentation/IntCptW10.pdf + * + * @param array $objectLines data + * + * @return void + */ + public function exportLDCompta($objectLines) + { + + $separator = ';'; + $end_line = "\n"; + + foreach ($objectLines as $line) { + + $date_document = dol_print_date($line->doc_date, '%Y%m%d'); + $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); + + if ($line->doc_type == 'supplier_invoice') { + $type_enregistrement = 'F'; + } elseif ($line->doc_type == 'customer_invoice') { + $type_enregistrement = 'C'; + } else { + $type_enregistrement = 'E'; + } + print $type_enregistrement . $separator; + print $line->code_journal . $separator; + print $line->id . $separator; + print $line->piece_num . $separator; + print $date_document . $separator; + print $line->label_operation . $separator; + print $separator; + + if ($line->doc_type == 'supplier_invoice') { + if ($line->montant < 0) { + $nature_piece = 'AF'; + } else { + $nature_piece = 'FF'; + } + } elseif ($line->doc_type == 'customer_invoice') { + if ($line->montant < 0) { + $nature_piece = 'AC'; + } else { + $nature_piece = 'FC'; + } + } else { + $nature_piece = ''; + } + print $nature_piece . $separator; + if (! empty($line->subledger_account)) { + print $line->numero_compte . $separator; + } + print price(abs($line->montant)) . $separator; + print $line->sens . $separator; + print length_accountg($line->numero_compte) . $separator; + print $date_creation . $separator; + print $line->lettering_code . $separator; + print $line->date_lettering . $separator; + + if (! empty($line->subledger_account)) { + print length_accounta($line->subledger_account) . $separator; + } + + if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { + print 'F' . $separator; + } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { + print 'C' . $separator; + } else { + print $separator; + } + print $end_line; + } + } + /** * trunc * diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 4b22f512826..8e44c378ba6 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -291,6 +291,7 @@ Modelcsv_quadratus=Export for Quadratus QuadraCompta Modelcsv_ebp=Export for EBP Modelcsv_cogilog=Export for Cogilog Modelcsv_agiris=Export for Agiris +Modelcsv_LDCompta=Export for LD Compta (v9 & higher) (Test) Modelcsv_openconcerto=Export for OpenConcerto (Test) Modelcsv_configurable=Export CSV Configurable Modelcsv_FEC=Export FEC From a55da8f8f889fd259093a5d97faa18d0884b4393 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 17:20:33 +0200 Subject: [PATCH 144/798] 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 145/798] 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 ''; + 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 ''; 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 146/798] 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 147/798] 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 148/798] 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 149/798] 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 150/798] 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 155/798] 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 151/798] 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 152/798] 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 153/798] 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 154/798] 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 156/798] 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 157/798] 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 158/798] 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 159/798] 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 160/798] 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 161/798] 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 162/798] 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 163/798] 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 164/798] 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 168/798] 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 169/798] 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 170/798] 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 171/798] 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 165/798] 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 166/798] 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 167/798] 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 172/798] 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 173/798] 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 174/798] 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 175/798] 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 182/798] 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 183/798] 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 184/798] 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 185/798] 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 186/798] 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 187/798] 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 188/798] 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 cfaf9ce0ea906f337845a6e8029d56410194419d Mon Sep 17 00:00:00 2001 From: jcp Date: Mon, 22 Jul 2019 11:44:18 +0200 Subject: [PATCH 189/798] SET special_code=4 for existing records --- 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 c2d4809f958..89abab54011 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 @@ -395,3 +395,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); + +-- Use special_code=3 in Takepos +UPDATE llx_facturedet AS fd LEFT JOIN llx_facture AS f ON f.rowid = fd.fk_facture SET fd.special_code = 4 WHERE f.module_source = 'takepos' AND fd.special_code = 3 From 6409cc06ae8d3827610497c8bda26b6671482080 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 22 Jul 2019 11:42:25 +0200 Subject: [PATCH 190/798] FIX duplicate on the check (TODO field $onetrtd not used ?) --- htdocs/core/class/commonobject.class.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 7cf3273b818..b2826737d0d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6289,7 +6289,7 @@ abstract class CommonObject * @param array $params Optional parameters. Example: array('style'=>'class="oddeven"', 'colspan'=>$colspan) * @param string $keysuffix Suffix string to add after name and id of field (can be used to avoid duplicate names) * @param string $keyprefix Prefix string to add before name and id of field (can be used to avoid duplicate names) - * @param string $onetrtd All fields in same tr td + * @param string $onetrtd All fields in same tr td (TODO field not used ?) * @return string */ function showOptionals($extrafields, $mode='view', $params=null, $keysuffix='', $keyprefix='', $onetrtd=0) @@ -6386,10 +6386,7 @@ abstract class CommonObject $out .= ''; - if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) - { - if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { $colspan='0'; } - } + if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { $colspan='0'; } if ($action == 'selectlines') { $colspan++; } From 7bdfd832884f1010c056b153e6691cd0b7412362 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 22 Jul 2019 15:15:08 +0200 Subject: [PATCH 191/798] 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 192/798] 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 193/798] 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 176/798] 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 177/798] 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 178/798] 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 179/798] 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 180/798] 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 181/798] 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 194/798] 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 195/798] 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 196/798] 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 197/798] 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 204/798] 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 205/798] 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 206/798] 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 207/798] 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 208/798] 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 209/798] 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 198/798] 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 199/798] 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 200/798] 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 201/798] 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 202/798] 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 203/798] 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 ''; print ''.dol_print_date($db->jdate($obj->datelimite), 'day').''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''.price($obj->total_ht).''; - print ''.price($obj->total_ttc).''; - print ''.price($obj->am).''; + print ''.price($obj->total_ttc).''; + print ''.price($obj->am).''; print ''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3, $obj->am).''; print ''; @@ -924,8 +924,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print ''.$langs->trans("Total").'   ('.$langs->trans("RemainderToTake").': '.price($total_ttc-$totalam).') '; print ' '; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''.price($total).''; - print ''.price($total_ttc).''; - print ''.price($totalam).''; + print ''.price($total_ttc).''; + print ''.price($totalam).''; print ' '; print ''; } @@ -1021,8 +1021,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print ''.$societestatic->getNomUrl(1, 'supplier', 44).''; print ''.dol_print_date($db->jdate($obj->date_lim_reglement), 'day').''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''.price($obj->total_ht).''; - print ''.price($obj->total_ttc).''; - print ''.price($obj->am).''; + print ''.price($obj->total_ttc).''; + print ''.price($obj->am).''; print ''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3).''; print ''; $total += $obj->total_ht; @@ -1034,8 +1034,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print ''.$langs->trans("Total").'   ('.$langs->trans("RemainderToPay").': '.price($total_ttc-$totalam).') '; print ' '; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''.price($total).''; - print ''.price($total_ttc).''; - print ''.price($totalam).''; + print ''.price($total_ttc).''; + print ''.price($totalam).''; print ' '; print ''; } From f45175cc9bd10fa284d6a80b2ae506a94fd112ef Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 24 Jul 2019 09:28:11 +0200 Subject: [PATCH 210/798] FIX missing filter by current contact --- htdocs/contact/consumption.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index 3f0d0313ee0..e2123e8307e 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -38,7 +38,7 @@ $id = GETPOST('id', 'int'); $result = restrictedArea($user, 'contact', $id, 'socpeople&societe'); $object = new Contact($db); if ($id > 0) $object->fetch($id); -if(empty($object->thirdparty)) $object->fetch_thirdparty(); +if (empty($object->thirdparty)) $object->fetch_thirdparty(); $socid = $object->thirdparty->id; // Sort & Order fields @@ -69,7 +69,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' } // Customer or supplier selected in drop box $thirdTypeSelect = GETPOST("third_select_id"); -$type_element = GETPOST('type_element')?GETPOST('type_element'):''; +$type_element = GETPOSTISSET('type_element')?GETPOST('type_element'):''; // Load translation files required by the page $langs->loadLangs(array("companies", "bills", "orders", "suppliers", "propal", "interventions", "contracts", "products")); @@ -179,7 +179,7 @@ if ($type_element == 'fichinter') $dateprint = 'f.datec'; $doc_number='f.ref'; } -if ($type_element == 'invoice') +elseif ($type_element == 'invoice') { // Customer : show products from invoices require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $documentstatic=new Facture($db); @@ -194,7 +194,7 @@ if ($type_element == 'invoice') $doc_number='f.ref'; $thirdTypeSelect='customer'; } -if ($type_element == 'propal') +elseif ($type_element == 'propal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $documentstatic=new Propal($db); @@ -209,7 +209,7 @@ if ($type_element == 'propal') $doc_number='c.ref'; $thirdTypeSelect='customer'; } -if ($type_element == 'order') +elseif ($type_element == 'order') { require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $documentstatic=new Commande($db); @@ -224,7 +224,7 @@ if ($type_element == 'order') $doc_number='c.ref'; $thirdTypeSelect='customer'; } -if ($type_element == 'supplier_invoice') +elseif ($type_element == 'supplier_invoice') { // Supplier : Show products from invoices. require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $documentstatic=new FactureFournisseur($db); @@ -239,7 +239,7 @@ if ($type_element == 'supplier_invoice') $doc_number='f.ref'; $thirdTypeSelect='supplier'; } -//if ($type_element == 'supplier_proposal') +//elseif ($type_element == 'supplier_proposal') //{ // require_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; // $documentstatic=new SupplierProposal($db); @@ -252,7 +252,7 @@ if ($type_element == 'supplier_invoice') // $doc_number='c.ref'; // $thirdTypeSelect='supplier'; //} -if ($type_element == 'supplier_order') +elseif ($type_element == 'supplier_order') { // Supplier : Show products from orders. require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; $documentstatic=new CommandeFournisseur($db); @@ -267,7 +267,7 @@ if ($type_element == 'supplier_order') $doc_number='c.ref'; $thirdTypeSelect='supplier'; } -if ($type_element == 'contract') +elseif ($type_element == 'contract') { // Order require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $documentstatic=new Contrat($db); @@ -300,6 +300,7 @@ if (!empty($sql_select)) $sql.= " FROM "/*.MAIN_DB_PREFIX."societe as s, "*/.$tables_from; // if ($type_element != 'fichinter') $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON d.fk_product = p.rowid '; $sql.= $where; + $sql.= ' AND ec.fk_socpeople = '.$object->id; if ($month > 0) { if ($year > 0) { $start = dol_mktime(0, 0, 0, $month, 1, $year); From 5a385bf1ccd2731090975ac75d7bd9c734404fc4 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Thu, 18 Jul 2019 11:53:36 +0200 Subject: [PATCH 211/798] ADD extrafields on global search --- htdocs/langs/fr_FR/products.lang | 1 + htdocs/product/admin/product.php | 11 +++++++++++ htdocs/product/list.php | 16 ++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index d4135c2273e..b759a023bf3 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -340,3 +340,4 @@ ErrorDestinationProductNotFound=Produit destination non trouvé ErrorProductCombinationNotFound=Variante du produit non trouvé ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit ProductsPricePerCustomer=Prix produit par clients +GlobalSearchOnExtrafield=Recherche globale : Appliquer la recherche sur les extrafields (Attention : les dates sont au format YYYY-MM-DD) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index a7e45d488e1..1fb2ac73fcf 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -146,6 +146,10 @@ if ($action == 'other') $value = GETPOST('activate_useProdFournDesc', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value, 'chaine', 0, '', $conf->entity); + + $value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); + $res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); + if ($value) { $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1"; $resql = $db->query($sql_test); @@ -675,6 +679,13 @@ if (! empty($conf->fournisseur->enabled)) print ''; } +print ''; +print ''.$langs->trans("GlobalSearchOnExtrafield").''; +print ''; +print $form->selectyesno("activate_globalSearchOnExtrafield", (! empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD)?$conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD:0), 1); +print ''; +print ''; + if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { // Add canvas feature diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 1a9b5fa1f6f..54a60d8e9bf 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -148,6 +148,22 @@ if (! empty($conf->barcode->enabled)) { $fieldstosearchall['p.barcode']='Gencod'; $fieldstosearchall['pfp.barcode']='GencodBuyPrice'; } +//global search on extrafields +if(!empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD) && !empty($extralabels)) { + foreach($extralabels as $codeExtra => $labelExtra) { + $TExtraTypeNotHandled=array( + 'boolean', + 'select', + 'sellist', + 'radio', + 'checkbox', + 'chkbxlst', + 'link', + 'separate', + ); + if(!in_array($extrafields->attribute_type[$codeExtra], $TExtraTypeNotHandled)) $fieldstosearchall['ef.' . $codeExtra] = $labelExtra; + } +} if (empty($conf->global->PRODUIT_MULTIPRICES)) { From 03ed4eb14191aa33170abbc6aa8f18da7de5a17c Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 19 Jul 2019 14:39:30 +0200 Subject: [PATCH 212/798] modif rowspan --- htdocs/product/admin/product.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 1fb2ac73fcf..ed0bcb88e74 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -552,7 +552,7 @@ print ' '."\n"; * Other parameters */ -$rowspan = 4; +$rowspan = 5; if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) $rowspan++; if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) $rowspan++; if (! empty($conf->global->MAIN_MULTILANGS)) $rowspan++; From 0ff121e7f1d51aba44675e532d2368d9644d4ff5 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Tue, 23 Jul 2019 16:51:08 +0200 Subject: [PATCH 213/798] add some new field on global search --- htdocs/product/list.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 54a60d8e9bf..a3dac45dcab 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -136,6 +136,11 @@ $fieldstosearchall = array( 'p.label'=>"ProductLabel", 'p.description'=>"Description", "p.note"=>"Note", + "p.note_public"=>"NotePublic", + "p.url"=>"PublicUrl", + "p.accountancy_code_sell"=>"AccountancyCodeSell", + "p.accountancy_code_buy"=>"AccountancyCodeBuy", + ); // multilang if (! empty($conf->global->MAIN_MULTILANGS)) @@ -148,6 +153,7 @@ if (! empty($conf->barcode->enabled)) { $fieldstosearchall['p.barcode']='Gencod'; $fieldstosearchall['pfp.barcode']='GencodBuyPrice'; } + //global search on extrafields if(!empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD) && !empty($extralabels)) { foreach($extralabels as $codeExtra => $labelExtra) { From 323d2df21086510932a8f5840732e78b85d1657f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 10:42:00 +0200 Subject: [PATCH 214/798] 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 ''; + 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 ''; @@ -442,6 +442,7 @@ function activitytrim($product_type) if ($num > 0 ) { + print '
'; 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 215/798] 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 216/798] 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 217/798] 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 218/798] 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 219/798] 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 "\n"; From 65e9d8f239048afcfea1d73a96917363090e245f Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Thu, 25 Jul 2019 11:14:59 +0200 Subject: [PATCH 220/798] 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 efd89588e56999ba34b3bf9ea48660a8aec74f81 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Thu, 25 Jul 2019 12:21:28 +0200 Subject: [PATCH 221/798] fix trans --- htdocs/langs/en_US/products.lang | 3 ++- htdocs/langs/fr_FR/products.lang | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 36ca0ede002..d9cf127b40d 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -340,4 +340,5 @@ ErrorCopyProductCombinations=There was an error while copying the product varian ErrorDestinationProductNotFound=Destination product not found ErrorProductCombinationNotFound=Product variant not found ActionAvailableOnVariantProductOnly=Action only available on the variant of product -ProductsPricePerCustomer=Product prices per customers \ No newline at end of file +ProductsPricePerCustomer=Product prices per customers +GlobalSearchOnExtrafield=Global search : apply on extrafields too (Warning : date format is YYYY-MM-DD) diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index b759a023bf3..7ab9f7a0f03 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -339,5 +339,4 @@ ErrorCopyProductCombinations=Une erreur s'est produite lors de la copie des vari ErrorDestinationProductNotFound=Produit destination non trouvé ErrorProductCombinationNotFound=Variante du produit non trouvé ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit -ProductsPricePerCustomer=Prix produit par clients -GlobalSearchOnExtrafield=Recherche globale : Appliquer la recherche sur les extrafields (Attention : les dates sont au format YYYY-MM-DD) +ProductsPricePerCustomer=Prix produit par clients \ No newline at end of file From 0bb92ff10ddd87c6a0179dddbb9efc0eabc0dbdc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 13:48:13 +0200 Subject: [PATCH 222/798] 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 223/798] 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 224/798] 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 225/798] 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 226/798] 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 227/798] 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 228/798] 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 229/798] 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 230/798] 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 231/798] 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 232/798] 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 233/798] 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 From 9a0e0fbdd2a03e3fc9ebf80cdbcb6303be719157 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 18:01:16 +0200 Subject: [PATCH 234/798] Update product.php --- htdocs/product/admin/product.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index ed0bcb88e74..ae911c04b81 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -147,8 +147,8 @@ if ($action == 'other') $value = GETPOST('activate_useProdFournDesc', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value, 'chaine', 0, '', $conf->entity); - $value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); - $res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); + //$value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); + //$res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); if ($value) { $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1"; @@ -679,12 +679,12 @@ if (! empty($conf->fournisseur->enabled)) print ''; } -print ''; +/*print ''; print ''.$langs->trans("GlobalSearchOnExtrafield").''; print ''; print $form->selectyesno("activate_globalSearchOnExtrafield", (! empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD)?$conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD:0), 1); print ''; -print ''; +print '';*/ if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { From 0c6499f1935d4ed030dbd5379ab376ebe815a25c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 18:01:47 +0200 Subject: [PATCH 235/798] Update product.php --- htdocs/product/admin/product.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index ae911c04b81..464ab169456 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -552,7 +552,7 @@ print ' '."\n"; * Other parameters */ -$rowspan = 5; +$rowspan = 4; if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) $rowspan++; if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) $rowspan++; if (! empty($conf->global->MAIN_MULTILANGS)) $rowspan++; From 0b69bf995760d52e08606fe24edd213909e8cf2d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 18:17:17 +0200 Subject: [PATCH 236/798] FIX #11553 --- .../core/modules/commande/doc/pdf_einstein.modules.php | 10 ++++++++-- .../modules/commande/doc/pdf_eratosthene.modules.php | 10 ++++++++-- .../core/modules/commande/doc/pdf_proforma.modules.php | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 5975da49fbe..1c1fa12c665 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1217,6 +1217,8 @@ class pdf_einstein extends ModelePDFCommandes } } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -1227,8 +1229,9 @@ class pdf_einstein extends ModelePDFCommandes * @param string $titlekey Translation key to show as title of document * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") { + // phpcs:enable global $conf,$langs,$hookmanager; // Load traductions files requiredby by page @@ -1429,6 +1432,8 @@ class pdf_einstein extends ModelePDFCommandes return $top_shift; } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show footer of page. Need this->emetteur object * @@ -1438,8 +1443,9 @@ class pdf_einstein extends ModelePDFCommandes * @param int $hidefreetext 1=Hide free text * @return int Return height of bottom margin including footer text */ - private function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) + protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { + // phpcs:enable global $conf; $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; return pdf_pagefoot($pdf, $outputlangs, 'ORDER_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext); diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 1abc6c95e20..51e36b53476 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -1352,6 +1352,8 @@ class pdf_eratosthene extends ModelePDFCommandes } } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -1362,8 +1364,9 @@ class pdf_eratosthene extends ModelePDFCommandes * @param string $titlekey Translation key to show as title of document * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") { + // phpcs:enable global $conf,$langs,$hookmanager; // Translations @@ -1564,6 +1567,8 @@ class pdf_eratosthene extends ModelePDFCommandes return $top_shift; } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show footer of page. Need this->emetteur object * @@ -1573,8 +1578,9 @@ class pdf_eratosthene extends ModelePDFCommandes * @param int $hidefreetext 1=Hide free text * @return int Return height of bottom margin including footer text */ - private function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) + protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { + // phpcs:enable global $conf; $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; return pdf_pagefoot($pdf, $outputlangs, 'ORDER_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext); diff --git a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php index f10f858544f..f1e591d73a8 100644 --- a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php @@ -57,6 +57,8 @@ class pdf_proforma extends pdf_einstein } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -67,8 +69,9 @@ class pdf_proforma extends pdf_einstein * @param string $titlekey Translation key to show as title of document * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "InvoiceProForma") + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "InvoiceProForma") { + // phpcs:enable global $conf,$langs,$hookmanager; parent::_pagehead($pdf, $object, $showaddress, $outputlangs, $titlekey); From 2c29f041a08fcead8bae178f4e82099bb5226751 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 25 Jul 2019 18:28:52 +0200 Subject: [PATCH 237/798] FIX move sql request in INNER JOIN --- htdocs/contact/consumption.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index e2123e8307e..9cde6e2df4e 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -173,7 +173,7 @@ if ($type_element == 'fichinter') $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, \'1\' as doc_type, f.datec as dateprint, f.fk_statut as status, tc.libelle, '; $tables_from = MAIN_DB_PREFIX.'fichinterdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'fichinter as f ON d.fk_fichinter=f.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='fichinter' and tc.source='external' and tc.active=1)"; $where = ' WHERE f.entity IN ('.getEntity('ficheinter').')'; $dateprint = 'f.datec'; @@ -187,7 +187,7 @@ elseif ($type_element == 'invoice') $tables_from = MAIN_DB_PREFIX.'facturedet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture as f ON d.fk_facture=f.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='facture' and tc.source='external' and tc.active=1)"; $where = " WHERE f.entity IN (".getEntity('invoice').")"; $dateprint = 'f.datef'; @@ -202,7 +202,7 @@ elseif ($type_element == 'propal') $tables_from = MAIN_DB_PREFIX.'propaldet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propal as c ON d.fk_propal=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='propal' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity('propal').')'; $datePrint = 'c.datep'; @@ -217,7 +217,7 @@ elseif ($type_element == 'order') $tables_from = MAIN_DB_PREFIX.'commandedet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commande as c ON d.fk_commande=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='commande' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity('order').')'; $dateprint = 'c.date_commande'; @@ -232,7 +232,7 @@ elseif ($type_element == 'supplier_invoice') $tables_from = MAIN_DB_PREFIX.'facture_fourn_det d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn as f ON d.fk_facture_fourn=f.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='invoice_supplier' and tc.source='external' and tc.active=1)"; $where = ' WHERE f.entity IN ('.getEntity($documentstatic->element).')'; $dateprint = 'f.datef'; @@ -260,7 +260,7 @@ elseif ($type_element == 'supplier_order') $tables_from = MAIN_DB_PREFIX.'commande_fournisseurdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commande_fournisseur as c ON d.fk_commande=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='order_supplier' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity($documentstatic->element).')'; $dateprint = 'c.date_valid'; @@ -276,7 +276,7 @@ elseif ($type_element == 'contract') $tables_from = MAIN_DB_PREFIX.'contratdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'contrat as c ON d.fk_contrat=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='contrat' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity('contrat').')'; $dateprint = 'c.date_valid'; @@ -300,7 +300,6 @@ if (!empty($sql_select)) $sql.= " FROM "/*.MAIN_DB_PREFIX."societe as s, "*/.$tables_from; // if ($type_element != 'fichinter') $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON d.fk_product = p.rowid '; $sql.= $where; - $sql.= ' AND ec.fk_socpeople = '.$object->id; if ($month > 0) { if ($year > 0) { $start = dol_mktime(0, 0, 0, $month, 1, $year); From 1f7cd1a3f8043e0a804dc949168fec5aa25a2535 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 26 Jul 2019 11:05:16 +0200 Subject: [PATCH 238/798] FIX name was able to be in field but went back to new line --- htdocs/core/modules/cheque/doc/pdf_blochet.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php index 32d35edb70a..32d5100c0f7 100644 --- a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php +++ b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php @@ -247,7 +247,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts $pdf->MultiCell(22,2,$outputlangs->transnoentities("Owner"),0,'L'); $pdf->SetFont('','', $default_font_size); $pdf->SetXY(32,26); - $pdf->MultiCell(60,2,$outputlangs->convToOutputCharset($this->account->proprio),0,'L'); + $pdf->MultiCell(80,2,$outputlangs->convToOutputCharset($this->account->proprio),0,'L'); $pdf->SetFont('','', $default_font_size); $pdf->SetXY(10,32); From f7c739bba94e8d57524ec3fbc821e6a7b8efc4fe Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 26 Jul 2019 12:12:08 +0200 Subject: [PATCH 239/798] FIX wrong path sociales/index.php doesnt exist anymore --- htdocs/compta/charges/index.php | 2 +- htdocs/compta/sociales/card.php | 2 +- htdocs/compta/sociales/list.php | 4 ++-- htdocs/compta/sociales/payments.php | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index f0188c5ed94..2f5802da185 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -183,7 +183,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print $socialcontrib->getNomUrl(1,'20'); print ''; // Type - print ''.$obj->lib.''; + print ''.$obj->lib.''; // Expected to pay print ''.price($obj->total).''; // Ref payment diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 6a0d53d6987..672b9003805 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -121,7 +121,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') $result=$object->delete($user); if ($result > 0) { - header("Location: index.php"); + header("Location: list.php"); exit; } else diff --git a/htdocs/compta/sociales/list.php b/htdocs/compta/sociales/list.php index be3e7ea5791..9b7dcbbe120 100644 --- a/htdocs/compta/sociales/list.php +++ b/htdocs/compta/sociales/list.php @@ -168,7 +168,7 @@ if ($resql) if ($year) { - $center=($year?"".img_previous()." ".$langs->trans("Year")." $year ".img_next()."":""); + $center=($year?"".img_previous()." ".$langs->trans("Year")." $year ".img_next()."":""); print_barre_liste($langs->trans("SocialContributions"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $center, $num, $totalnboflines, 'title_accountancy.png', 0, $newcardbutton, '', $limit); } else @@ -258,7 +258,7 @@ if ($resql) print ''; if ($obj->periode) { - print 'jdate($obj->periode)).'">'.dol_print_date($db->jdate($obj->periode),'day').''; + print 'jdate($obj->periode)).'">'.dol_print_date($db->jdate($obj->periode),'day').''; } else { diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index 936c2c9c0f2..4025f86ff01 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -90,7 +90,7 @@ print ''; if ($mode != 'sconly') { - $center=($year?''.img_previous($langs->trans("Previous"), 'class="valignbottom"')." ".$langs->trans("Year").' '.$year.' '.img_next($langs->trans("Next"), 'class="valignbottom"')."":""); + $center=($year?''.img_previous($langs->trans("Previous"), 'class="valignbottom"')." ".$langs->trans("Year").' '.$year.' '.img_next($langs->trans("Next"), 'class="valignbottom"')."":""); print_barre_liste($title,$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,$center,$num,$totalnboflines, 'title_accountancy', 0, '', '', $limit, 1); } else @@ -181,7 +181,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print $socialcontrib->getNomUrl(1,'20'); print ''; // Type - print ''.$obj->lib.''; + print ''.$obj->lib.''; // Date $date=$obj->periode; if (empty($date)) $date=$obj->date_ech; From 38bb046abb1baa28ddfea03912505783a2e01d9f Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 26 Jul 2019 12:38:49 +0200 Subject: [PATCH 240/798] NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order --- htdocs/fourn/commande/dispatch.php | 58 +++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 48599a5bbf2..6e1bd41ea24 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005 Eric Seigne * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2010-2019 Juanjo Menent * Copyright (C) 2014 Cedric Gross * Copyright (C) 2016 Florian Henry * Copyright (C) 2017 Ferran Marcet @@ -239,6 +239,16 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) $pu = "pu_" . $reg[1] . '_' . $reg[2]; // This is unit price including discount $fk_commandefourndet = "fk_commandefourndet_" . $reg[1] . '_' . $reg[2]; + if (! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT )) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + $dto = GETPOST("dto_" . $reg[1] . '_' . $reg[2]); + if (! empty($dto)) { + $unit_price = price2num(GETPOST("pu_" . $reg[1]) * (100 - $dto) / 100, 'MU'); + } + $saveprice = "saveprice_" . $reg[1] . '_' . $reg[2]; + } + } + // We ask to move a qty if (GETPOST($qty) != 0) { if (! (GETPOST($ent, 'int') > 0)) { @@ -254,6 +264,24 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) setEventMessages($object->error, $object->errors, 'errors'); $error ++; } + + if (! $error && ! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT)) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + $dto = GETPOST("dto_" . $reg[1] . '_' . $reg[2]); + //update supplier price + if (isset($_POST[$saveprice])) { + // TODO Use class + $sql = "UPDATE " . MAIN_DB_PREFIX . "product_fournisseur_price"; + $sql .= " SET unitprice='" . GETPOST($pu) . "'"; + $sql .= ", price=" . GETPOST($pu) . "*quantity"; + $sql .= ", remise_percent='" . $dto . "'"; + $sql .= " WHERE fk_soc=" . $object->socid; + $sql .= " AND fk_product=" . GETPOST($prod, 'int'); + + $resql = $db->query($sql); + } + } + } } } } @@ -552,6 +580,15 @@ if ($id > 0 || ! empty($ref)) { print '' . $langs->trans("QtyDispatchedShort") . ''; print '' . $langs->trans("QtyToDispatchShort") . ''; print ''; + + if (! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT )) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + print '' . $langs->trans("Price") . ''; + print '' . $langs->trans("ReductionShort") . ' (%)'; + print '' . $langs->trans("UpdatePrice") . ''; + } + } + print '' . $langs->trans("Warehouse") . ''; // Enable hooks to append additional columns @@ -760,6 +797,25 @@ if ($id > 0 || ! empty($ref)) { print ''; + if (! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT)) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + // Price + print ''; + print ''; + print ''; + + // Discount + print ''; + print ''; + print ''; + + // Save price + print ''; + print ''; + print ''; + } + } + // Warehouse print ''; if (count($listwarehouses) > 1) { From f67f99099caf793c96a835d0790c1d17193723a2 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 26 Jul 2019 12:45:46 +0200 Subject: [PATCH 241/798] NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order --- .../class/bonprelevement.class.php | 51 ++++++------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 52b9ac8ac27..1a98c33ab02 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1,7 +1,7 @@ - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2010-2018 Juanjo Menent + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2010-2015 Juanjo Menent * Copyright (C) 2010-2014 Laurent Destailleur * Copyright (C) 2014-2016 Ferran Marcet * Copyright (C) 2018 Nicolas ZABOURI @@ -473,44 +473,20 @@ class BonPrelevement extends CommonObject } } - if (empty($conf->global->WITHDRAWAL_DISABLE_PAYMENT_PER_CUSTOMER)) { - - // Make one payment per customer - foreach ($amountsperthirdparty as $thirdpartyid => $cursoramounts) { - $paiement = new Paiement($this->db); - $paiement->datepaye = $date; - $paiement->amounts = $cursoramounts; // Array with detail of dispatching of payments for each invoice - $paiement->paiementid = 3; // - $paiement->num_paiement = $this->ref; // Set ref of direct debit note - $paiement->id_prelevement = $this->id; - - $paiement_id = $paiement->create($user); - if ($paiement_id < 0) { - dol_syslog(get_class($this) . "::set_infocredit AddPayment Error"); - $error++; - } else { - $result = $paiement->addPaymentToBank($user, 'payment', '(WithdrawalPayment)', $bankaccount, '', ''); - if ($result < 0) { - dol_syslog(get_class($this) . "::set_infocredit AddPaymentToBank Error"); - $error++; - } - } - //var_dump($paiement->amounts); - //var_dump($thirdpartyid); - //var_dump($cursoramounts); - } - } else { + // Make one payment per customer + foreach ($amountsperthirdparty as $thirdpartyid => $cursoramounts) + { $paiement = new Paiement($this->db); - $paiement->datepaye = $date ; - $paiement->amounts = $amounts; - $paiement->paiementid = 3; // - $paiement->num_paiement = $this->ref ; + $paiement->datepaye = $date; + $paiement->amounts = $cursoramounts; // Array with detail of dispatching of payments for each invoice + $paiement->paiementid = 3; // + $paiement->num_paiement = $this->ref; // Set ref of direct debit note $paiement->id_prelevement = $this->id; $paiement_id = $paiement->create($user); if ($paiement_id < 0) { - dol_syslog("BonPrelevement::set_credite AddPayment Error"); + dol_syslog(get_class($this)."::set_infocredit AddPayment Error"); $error++; } else @@ -518,12 +494,15 @@ class BonPrelevement extends CommonObject $result=$paiement->addPaymentToBank($user, 'payment', '(WithdrawalPayment)', $bankaccount, '', ''); if ($result < 0) { - dol_syslog("BonPrelevement::set_credite AddPaymentToBank Error"); + dol_syslog(get_class($this)."::set_infocredit AddPaymentToBank Error"); $error++; } } - + //var_dump($paiement->amounts); + //var_dump($thirdpartyid); + //var_dump($cursoramounts); } + // Update withdrawal line // TODO: Translate to ligneprelevement.class.php $sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_lignes"; From e92c6c87a0f20fda7690480d465c968fc469abf0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 13:16:49 +0200 Subject: [PATCH 242/798] FIX API return 404 sometimes even if API exists --- htdocs/api/index.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index e55a30304a4..6788b208a2e 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -88,17 +88,22 @@ if (preg_match('/api\/index\.php\/explorer/', $_SERVER["PHP_SELF"]) && ! empty($ // index.php/xxx called by any REST client to run API +$reg=array(); preg_match('/index\.php\/([^\/]+)(.*)$/', $_SERVER["PHP_SELF"], $reg); // .../index.php/categories?sortfield=t.rowid&sortorder=ASC // Set the flag to say to refresh (when we reload the explorer, production must be for API call only) -$refreshcache=false; +/*$refreshcache=false; if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) { $refreshcache=true; -} - +}*/ +// When in production mode, a file api/temp/routes.php is created with the API available of current call. +// But, if we set $refreshcache to false, so it may have only one API in the routes.php file if we make a call for one API without +// using the explorer. And when we make another call for another API, the API is not into the api/temp/routes.php and a 404 is returned. +// So we force refresh to each call. +$refreshcache=true; $api = new DolibarrApi($db, '', $refreshcache); //var_dump($api->r->apiVersionMap); @@ -115,7 +120,7 @@ UploadFormat::$allowedMimeTypes = array('image/jpeg', 'image/png', 'text/plain', -// Call Explorer file for all APIs definitions +// Call Explorer file for all APIs definitions (this part is slow) if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) { // Scan all API files to load them @@ -253,5 +258,6 @@ if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && //var_dump($api->r->apiVersionMap); //exit; -// Call API (we suppose we found it) +// Call API (we suppose we found it). +// The handle will use the file api/temp/routes.php to get data to run the API. If the file exists and the entry for API is not found, it will return 404. $api->r->handle(); From 8b81702dd7805d31a46f3a55ac6942de41bc5161 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 13:23:42 +0200 Subject: [PATCH 243/798] Fix API 404 errors --- htdocs/api/index.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 6788b208a2e..38050592a37 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -93,17 +93,15 @@ preg_match('/index\.php\/([^\/]+)(.*)$/', $_SERVER["PHP_SELF"], $reg); // .../index.php/categories?sortfield=t.rowid&sortorder=ASC -// Set the flag to say to refresh (when we reload the explorer, production must be for API call only) -/*$refreshcache=false; +// When in production mode, a file api/temp/routes.php is created with the API available of current call. +// But, if we set $refreshcache to false, so it may have only one API in the routes.php file if we make a call for one API without +// using the explorer. And when we make another call for another API, the API is not into the api/temp/routes.php and a 404 is returned. +// So we force refresh to each call. +$refreshcache=(empty($conf->global->API_PRODUCTION_DO_NOT_ALWAYS_REFRESH_CACHE) ? true : false); if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) { $refreshcache=true; -}*/ -// When in production mode, a file api/temp/routes.php is created with the API available of current call. -// But, if we set $refreshcache to false, so it may have only one API in the routes.php file if we make a call for one API without -// using the explorer. And when we make another call for another API, the API is not into the api/temp/routes.php and a 404 is returned. -// So we force refresh to each call. -$refreshcache=true; +} $api = new DolibarrApi($db, '', $refreshcache); //var_dump($api->r->apiVersionMap); From e464e2e1b8c0cce40e37b29cb2199adc7e3824b6 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 26 Jul 2019 14:16:28 +0200 Subject: [PATCH 244/798] Fix application_fee name stripe.class.php stripe changes name without change API :/ application_fee_amount for amount application_fee for % --- 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 92c6335cd29..14265a9b5db 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -404,7 +404,7 @@ class Stripe extends CommonObject if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { - $dataforintent["application_fee"] = $stripefee; + $dataforintent["application_fee_amount"] = $stripefee; } if ($usethirdpartyemailforreceiptemail && is_object($object) && $object->thirdparty->email) { @@ -731,7 +731,7 @@ class Stripe extends CommonObject ); if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { - $paymentarray["application_fee"] = $stripefee; + $paymentarray["application_fee_amount"] = $stripefee; } if ($societe->email && $usethirdpartyemailforreceiptemail) { From bd2f5ba037ff02c713a560f229696110fcd7257c Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 26 Jul 2019 14:16:54 +0200 Subject: [PATCH 245/798] FIX Replace conf by hidden conf editable by user --- htdocs/product/admin/product.php | 9 --------- htdocs/product/list.php | 23 ++--------------------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 464ab169456..279265b8e96 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -147,9 +147,6 @@ if ($action == 'other') $value = GETPOST('activate_useProdFournDesc', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value, 'chaine', 0, '', $conf->entity); - //$value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); - //$res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); - if ($value) { $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1"; $resql = $db->query($sql_test); @@ -679,12 +676,6 @@ if (! empty($conf->fournisseur->enabled)) print ''; } -/*print ''; -print ''.$langs->trans("GlobalSearchOnExtrafield").''; -print ''; -print $form->selectyesno("activate_globalSearchOnExtrafield", (! empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD)?$conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD:0), 1); -print ''; -print '';*/ if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { diff --git a/htdocs/product/list.php b/htdocs/product/list.php index a3dac45dcab..460e9d5ee45 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -136,10 +136,6 @@ $fieldstosearchall = array( 'p.label'=>"ProductLabel", 'p.description'=>"Description", "p.note"=>"Note", - "p.note_public"=>"NotePublic", - "p.url"=>"PublicUrl", - "p.accountancy_code_sell"=>"AccountancyCodeSell", - "p.accountancy_code_buy"=>"AccountancyCodeBuy", ); // multilang @@ -153,23 +149,8 @@ if (! empty($conf->barcode->enabled)) { $fieldstosearchall['p.barcode']='Gencod'; $fieldstosearchall['pfp.barcode']='GencodBuyPrice'; } - -//global search on extrafields -if(!empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD) && !empty($extralabels)) { - foreach($extralabels as $codeExtra => $labelExtra) { - $TExtraTypeNotHandled=array( - 'boolean', - 'select', - 'sellist', - 'radio', - 'checkbox', - 'chkbxlst', - 'link', - 'separate', - ); - if(!in_array($extrafields->attribute_type[$codeExtra], $TExtraTypeNotHandled)) $fieldstosearchall['ef.' . $codeExtra] = $labelExtra; - } -} +// Personalized search criterias. Example: $conf->global->PRODUCT_QUICKSEARCH_ON_FIELDS = 'p.ref=ProductRef;p.label=ProductLabel' +if (! empty($conf->global->PRODUCT_QUICKSEARCH_ON_FIELDS)) $fieldstosearchall=dolExplodeIntoArray($conf->global->PRODUCT_QUICKSEARCH_ON_FIELDS); if (empty($conf->global->PRODUIT_MULTIPRICES)) { From 97c950badb48efd7b7aaab1efc9815062268f444 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 16:30:16 +0200 Subject: [PATCH 246/798] FIX Attachment was lost when we validate an expense report --- .../class/expensereport.class.php | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 0041974d4e9..bffe8d146d5 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1132,17 +1132,51 @@ class ExpenseReport extends CommonObject $resql=$this->db->query($sql); if ($resql) { - if (!$notrigger) + if (! $error && ! $notrigger) { // Call trigger $result=$this->call_trigger('EXPENSE_REPORT_VALIDATE', $fuser); - if ($result < 0) { $error++; } // End call triggers } + if (! $error) + { + $this->oldref = $this->ref; + + // Rename directory if dir was a temporary ref + if (preg_match('/^[\(]?PROV/i', $this->ref)) + { + // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) + // in order not to lose the attachments + $oldref = dol_sanitizeFileName($this->ref); + $newref = dol_sanitizeFileName($num); + $dirsource = $conf->expensereport->dir_output.'/'.$oldref; + $dirdest = $conf->expensereport->dir_output.'/'.$newref; + if (file_exists($dirsource)) + { + dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); + + if (@rename($dirsource, $dirdest)) + { + dol_syslog("Rename ok"); + // Rename docs starting with $oldref with $newref + $listoffiles=dol_dir_list($conf->expensereport->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); + foreach($listoffiles as $fileentry) + { + $dirsource=$fileentry['name']; + $dirdest=preg_replace('/^'.preg_quote($oldref, '/').'/', $newref, $dirsource); + $dirsource=$fileentry['path'].'/'.$dirsource; + $dirdest=$fileentry['path'].'/'.$dirdest; + @rename($dirsource, $dirdest); + } + } + } + } + } + if (! $error) { $this->oldref = $this->ref; From 471a947e8abe8789fc49da2ed99c679cedd4349d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 16:30:16 +0200 Subject: [PATCH 247/798] FIX Attachment was lost when we validate an expense report Conflicts: htdocs/expensereport/class/expensereport.class.php --- htdocs/expensereport/class/expensereport.class.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index dd2818f28bf..aec06b7972b 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1120,11 +1120,10 @@ class ExpenseReport extends CommonObject $resql=$this->db->query($sql); if ($resql) { - if (!$notrigger) + if (! $error && ! $notrigger) { // Call trigger - $result=$this->call_trigger('EXPENSE_REPORT_VALIDATE',$fuser); - + $result=$this->call_trigger('EXPENSE_REPORT_VALIDATE', $fuser); if ($result < 0) { $error++; } @@ -1148,7 +1147,7 @@ class ExpenseReport extends CommonObject $dirdest = $conf->expensereport->dir_output.'/'.$newref; if (file_exists($dirsource)) { - dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); + dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) { From 4ed7571a3f5b0d3de7f62dd2ace23a367c3e2716 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 16:36:39 +0200 Subject: [PATCH 248/798] Merge --- .../class/expensereport.class.php | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 684786f7e27..3bdd026e62f 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1142,41 +1142,6 @@ class ExpenseReport extends CommonObject // End call triggers } - if (! $error) - { - $this->oldref = $this->ref; - - // Rename directory if dir was a temporary ref - if (preg_match('/^[\(]?PROV/i', $this->ref)) - { - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments - $oldref = dol_sanitizeFileName($this->ref); - $newref = dol_sanitizeFileName($num); - $dirsource = $conf->expensereport->dir_output.'/'.$oldref; - $dirdest = $conf->expensereport->dir_output.'/'.$newref; - if (file_exists($dirsource)) - { - dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); - - if (@rename($dirsource, $dirdest)) - { - dol_syslog("Rename ok"); - // Rename docs starting with $oldref with $newref - $listoffiles=dol_dir_list($conf->expensereport->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); - foreach($listoffiles as $fileentry) - { - $dirsource=$fileentry['name']; - $dirdest=preg_replace('/^'.preg_quote($oldref, '/').'/', $newref, $dirsource); - $dirsource=$fileentry['path'].'/'.$dirsource; - $dirdest=$fileentry['path'].'/'.$dirdest; - @rename($dirsource, $dirdest); - } - } - } - } - } - if (! $error) { $this->oldref = $this->ref; From a412a99263439fd7822a6564f6c3a5102b86a928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josep=20Llu=C3=ADs?= Date: Fri, 26 Jul 2019 17:51:54 +0200 Subject: [PATCH 249/798] FIX: move doActions hook before standard actions Move doActions hook before standard actions in element resources --- htdocs/resource/element_resource.php | 115 ++++++++++++++------------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php index 2e4085200a2..2e8ca43cd0e 100644 --- a/htdocs/resource/element_resource.php +++ b/htdocs/resource/element_resource.php @@ -1,6 +1,7 @@ * Copyright (C) 2016 Gilles Poirier + * Copyright (C) 2019 Josep Lluís Amador * * 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 @@ -80,47 +81,71 @@ if ($socid > 0) // Special for thirdparty * Actions */ -if ($action == 'add_element_resource' && ! $cancel) -{ - $res = 0; - if (! ($resource_id > 0)) - { - $error++; - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Resource")), null, 'errors'); - $action=''; - } - else - { - $objstat = fetchObjectByElement($element_id, $element, $element_ref); - $objstat->element = $element; // For externals module, we need to keep @xx - $res = $objstat->add_element_resource($resource_id, $resource_type, $busy, $mandatory); - } - if (! $error && $res > 0) - { - setEventMessages($langs->trans('ResourceLinkedWithSuccess'), null, 'mesgs'); - header("Location: ".$_SERVER['PHP_SELF'].'?element='.$element.'&element_id='.$objstat->id); - exit; - } - elseif ($objstat) - { - setEventMessages($objstat->error, $objstat->errors, 'errors'); - } -} +$parameters = array('resource_id' => $resource_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'); -// Update ressource -if ($action == 'update_linked_resource' && $user->rights->resource->write && !GETPOST('cancel', 'alpha') ) +if (empty($reshook)) { - $res = $object->fetch_element_resource($lineid); - if($res) + if ($action == 'add_element_resource' && ! $cancel) { - $object->busy = $busy; - $object->mandatory = $mandatory; + $res = 0; + if (! ($resource_id > 0)) + { + $error++; + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Resource")), null, 'errors'); + $action=''; + } + else + { + $objstat = fetchObjectByElement($element_id, $element, $element_ref); + $objstat->element = $element; // For externals module, we need to keep @xx + $res = $objstat->add_element_resource($resource_id, $resource_type, $busy, $mandatory); + } + if (! $error && $res > 0) + { + setEventMessages($langs->trans('ResourceLinkedWithSuccess'), null, 'mesgs'); + header("Location: ".$_SERVER['PHP_SELF'].'?element='.$element.'&element_id='.$objstat->id); + exit; + } + elseif ($objstat) + { + setEventMessages($objstat->error, $objstat->errors, 'errors'); + } + } - $result = $object->update_element_resource($user); + // Update ressource + if ($action == 'update_linked_resource' && $user->rights->resource->write && !GETPOST('cancel', 'alpha') ) + { + $res = $object->fetch_element_resource($lineid); + if($res) + { + $object->busy = $busy; + $object->mandatory = $mandatory; + + $result = $object->update_element_resource($user); + + if ($result >= 0) + { + setEventMessages($langs->trans('RessourceLineSuccessfullyUpdated'), null, 'mesgs'); + header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id); + exit; + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } + } + } + + // Delete a resource linked to an element + if ($action == 'confirm_delete_linked_resource' && $user->rights->resource->delete && $confirm === 'yes') + { + $result = $object->delete_resource($lineid, $element); if ($result >= 0) { - setEventMessages($langs->trans('RessourceLineSuccessfullyUpdated'), null, 'mesgs'); + setEventMessages($langs->trans('RessourceLineSuccessfullyDeleted'), null, 'mesgs'); header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id); exit; } @@ -131,28 +156,6 @@ if ($action == 'update_linked_resource' && $user->rights->resource->write && !GE } } -// Delete a resource linked to an element -if ($action == 'confirm_delete_linked_resource' && $user->rights->resource->delete && $confirm === 'yes') -{ - $result = $object->delete_resource($lineid, $element); - - if ($result >= 0) - { - setEventMessages($langs->trans('RessourceLineSuccessfullyDeleted'), null, 'mesgs'); - header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id); - exit; - } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } -} - -$parameters=array('resource_id'=>$resource_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'); - - $parameters=array('resource_id'=>$resource_id); $reshook=$hookmanager->executeHooks('getElementResources', $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 2867e31a6379740723fa1021fc157392435bd4b1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 27 Jul 2019 01:13:39 +0200 Subject: [PATCH 250/798] Fix CSS --- htdocs/comm/card.php | 14 +++++++------- htdocs/fourn/card.php | 8 ++++---- htdocs/margin/tabs/thirdpartyMargins.php | 4 ++-- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/ticket/list.php | 4 +++- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 721aba20de8..285ed03e7c3 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -694,7 +694,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print ''; + print '
'; print ''; print '
'; @@ -779,7 +779,7 @@ if ($object->id > 0) $db->free($resql2); print '
'; - print '
'.$langs->trans("LastPropals", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllPropals").' '.$num.'
'; + print '
'; print ''; print '
'; @@ -855,7 +855,7 @@ if ($object->id > 0) $num = $db->num_rows($resql); if ($num > 0) { print '
'; - print '
'.$langs->trans("LastCustomerOrders", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllOrders").' '.$num.'
'; + print '
'; print ''; print '
'; @@ -919,7 +919,7 @@ if ($object->id > 0) if ($num >0) { print '
'; - print '
'.$langs->trans("LastSendings", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSendings").' '.$num.'
'; + print '
'; print ''; print ''; } From fd3f890f7b2b8b06d27820210ad016e079add6f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 14:15:04 +0200 Subject: [PATCH 621/798] NEW Can restrict access using DAV module to some host IPs only --- htdocs/admin/dav.php | 9 +++++++-- htdocs/api/admin/index.php | 2 +- htdocs/dav/fileserver.php | 16 ++++++++++++++++ htdocs/langs/en_US/admin.lang | 3 ++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index 005394739f0..f4fbcbbdd59 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -35,7 +35,10 @@ if (!$user->admin) $action = GETPOST('action', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); + + $arrayofparameters=array( + 'DAV_RESTICT_ON_IP'=>array('css'=>'minwidth200', 'enabled'=>1), 'DAV_ALLOW_PRIVATE_DIR'=>array('css'=>'minwidth200', 'enabled'=>2), 'DAV_ALLOW_PUBLIC_DIR'=>array('css'=>'minwidth200', 'enabled'=>1), 'DAV_ALLOW_ECM_DIR'=>array('css'=>'minwidth200', 'enabled'=>$conf->ecm->enabled) @@ -82,7 +85,8 @@ if ($action == 'edit') if (isset($val['enabled']) && empty($val['enabled'])) continue; print ''; print ''; print ''; -print ''; +print ''; print ''; print ''; diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index b056ac9730c..4a38511305e 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -55,6 +55,22 @@ if (empty($conf->dav->enabled)) accessforbidden(); +// Restrict API to some IPs +if (! empty($conf->global->DAV_RESTICT_ON_IP)) +{ + $allowedip=explode(' ', $conf->global->DAV_RESTICT_ON_IP); + $ipremote = getUserRemoteIP(); + if (! in_array($ipremote, $allowedip)) + { + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->DAV_RESTICT_ON_IP); + print 'DAV not allowed from the IP '.$ipremote; + header('HTTP/1.1 503 DAV not allowed from your IP '.$ipremote); + //print $conf->global->DAV_RESTICT_ON_IP; + exit(0); + } +} + + $entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : (!empty($conf->entity) ? $conf->entity : 1)); // settings diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index ee3da865377..726ba624434 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,5 +1932,6 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined -RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +RESTICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +RESTICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. BaseOnSabeDavVersion=Based on the library SabreDAV version \ No newline at end of file From ae87b33e818e6933edff19d3a1aa5dc26dfe3a3b Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Tue, 20 Aug 2019 17:04:41 +0200 Subject: [PATCH 622/798] NEW add entity in fetch method for contract --- htdocs/contrat/class/contrat.class.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0a2c59ece2c..125352d8004 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -96,6 +96,12 @@ class Contrat extends CommonObject */ public $ref_supplier; + /** + * Entity of the contract + * @var int + */ + public $entity; + /** * Client id linked to the contract * @var int @@ -624,6 +630,7 @@ class Contrat extends CommonObject $sql = "SELECT rowid, statut, ref, fk_soc, mise_en_service as datemise,"; $sql.= " ref_supplier, ref_customer,"; $sql.= " ref_ext,"; + $sql.= " entity,"; $sql.= " fk_user_mise_en_service, date_contrat as datecontrat,"; $sql.= " fk_user_author, fin_validite, date_cloture,"; $sql.= " fk_projet as fk_project,"; @@ -658,6 +665,7 @@ class Contrat extends CommonObject $this->ref_customer = $obj->ref_customer; $this->ref_supplier = $obj->ref_supplier; $this->ref_ext = $obj->ref_ext; + $this->entity = $obj->entity; $this->statut = $obj->statut; $this->mise_en_service = $this->db->jdate($obj->datemise); From d82e60adb7e661174ffee1a9bcd40f0e69caa7c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 20:31:46 +0200 Subject: [PATCH 623/798] Work on namespaces test --- dev/namespacemig/README.md | 4 ++++ dev/namespacemig/aaa.class.php | 23 +++++++++++++++++++++++ dev/namespacemig/bbb.class.php | 25 +++++++++++++++++++++++++ dev/namespacemig/bbb.php | 31 +++++++++++++++++++++++++++++++ dev/namespacemig/main.inc.php | 7 +++++++ 5 files changed, 90 insertions(+) create mode 100644 dev/namespacemig/README.md create mode 100644 dev/namespacemig/aaa.class.php create mode 100644 dev/namespacemig/bbb.class.php create mode 100755 dev/namespacemig/bbb.php create mode 100644 dev/namespacemig/main.inc.php diff --git a/dev/namespacemig/README.md b/dev/namespacemig/README.md new file mode 100644 index 00000000000..981292355ab --- /dev/null +++ b/dev/namespacemig/README.md @@ -0,0 +1,4 @@ +Test to migrate Dolibarr to namespace "Dolibarr". + +Script bbb.php is a script of an external module with current code writing. +It must works after migration. \ No newline at end of file diff --git a/dev/namespacemig/aaa.class.php b/dev/namespacemig/aaa.class.php new file mode 100644 index 00000000000..1070e96f875 --- /dev/null +++ b/dev/namespacemig/aaa.class.php @@ -0,0 +1,23 @@ +do(); + +$aaa = new Aaa(); +$aaa->do(); + +echo $aaa::AAA."\n"; +echo $bbb::BBB."\n"; + +echo Aaa::AAA."\n"; +echo Bbb::BBB."\n"; + +echo faaa()."\n"; +echo fbbb()."\n"; + +echo "globalaaa=$globalaaa\n"; +echo "globalbbb=$globalbbb\n"; diff --git a/dev/namespacemig/main.inc.php b/dev/namespacemig/main.inc.php new file mode 100644 index 00000000000..5709a31f733 --- /dev/null +++ b/dev/namespacemig/main.inc.php @@ -0,0 +1,7 @@ + Date: Tue, 20 Aug 2019 20:32:17 +0200 Subject: [PATCH 624/798] Fix RESTRICT_ON_API --- htdocs/admin/dav.php | 4 +++- htdocs/api/admin/index.php | 6 +++--- htdocs/api/index.php | 8 ++++---- htdocs/dav/fileserver.php | 8 ++++---- htdocs/langs/en_US/admin.lang | 4 ++-- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index f4fbcbbdd59..032c4f07e56 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -86,7 +86,9 @@ if ($action == 'edit') print ''; print ''; print ''; -print ''; -print ''; +print ''; +print ''; print ''; print ''; diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 1f1235571cc..c63a376e806 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -207,16 +207,16 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $reg[2] != '/resources.json' && preg_match('/^\/(swagger|resources)\.json\/(.+)$/', $reg[2], $regbis) && $regbis[2] != 'root'))) { // Restrict API to some IPs - if (! empty($conf->global->API_RESTICT_ON_IP)) + if (! empty($conf->global->API_RESTRICT_ON_IP)) { - $allowedip=explode(' ', $conf->global->API_RESTICT_ON_IP); + $allowedip=explode(' ', $conf->global->API_RESTRICT_ON_IP); $ipremote = getUserRemoteIP(); if (! in_array($ipremote, $allowedip)) { - dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTICT_ON_IP); + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP); print 'API not allowed from the IP '.$ipremote; header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); - //print $conf->global->API_RESTICT_ON_IP; + //print $conf->global->API_RESTRICT_ON_IP; exit(0); } } diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index 4a38511305e..dae6565bc93 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -56,16 +56,16 @@ if (empty($conf->dav->enabled)) // Restrict API to some IPs -if (! empty($conf->global->DAV_RESTICT_ON_IP)) +if (! empty($conf->global->DAV_RESTRICT_ON_IP)) { - $allowedip=explode(' ', $conf->global->DAV_RESTICT_ON_IP); + $allowedip=explode(' ', $conf->global->DAV_RESTRICT_ON_IP); $ipremote = getUserRemoteIP(); if (! in_array($ipremote, $allowedip)) { - dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->DAV_RESTICT_ON_IP); + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->DAV_RESTRICT_ON_IP); print 'DAV not allowed from the IP '.$ipremote; header('HTTP/1.1 503 DAV not allowed from your IP '.$ipremote); - //print $conf->global->DAV_RESTICT_ON_IP; + //print $conf->global->DAV_RESTRICT_ON_IP; exit(0); } } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 726ba624434..ef5d6388f6e 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,6 +1932,6 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined -RESTICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. -RESTICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. +RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. BaseOnSabeDavVersion=Based on the library SabreDAV version \ No newline at end of file From f1b80fc19a1f01cc9457bef9eff2768af787bc68 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Tue, 20 Aug 2019 23:44:30 +0200 Subject: [PATCH 625/798] Add 'Direct Cash Payment' button in TakePOS --- htdocs/langs/en_US/cashdesk.lang | 2 ++ htdocs/takepos/admin/setup.php | 8 ++++++++ htdocs/takepos/takepos.php | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 012b6b4c804..628de17efcc 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -70,3 +70,5 @@ TerminalSelect=Select terminal you want to use: POSTicket=POS Ticket BasicPhoneLayout=Use basic layout for phones SetupOfTerminalNotComplete=Setup of terminal %s is not complete +DirectPayment=Direct payment +DirectPaymentButton=Direct cash payment button diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index 3fb9d869cd0..6d33b8a19c2 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -79,6 +79,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_FOOTER", GETPOST('TAKEPOS_FOOTER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_NUMPAD", GETPOST('TAKEPOS_NUMPAD', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_NUM_TERMINALS", GETPOST('TAKEPOS_NUM_TERMINALS', 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity); if ($conf->global->TAKEPOS_ORDER_NOTES==1) { @@ -223,6 +224,13 @@ $array=array(0=>$langs->trans("Numberspad"), 1=>$langs->trans("BillsCoinsPad")); print $form->selectarray('TAKEPOS_NUMPAD', $array, (empty($conf->global->TAKEPOS_NUMPAD)?'0':$conf->global->TAKEPOS_NUMPAD), 0); print "\n"; +// Direct Payment +print '\n"; + $substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $htmltext = ''.$langs->trans("AvailableVariables").':
'; diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 7260bc81a58..4dc481a98cf 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -575,6 +575,12 @@ function TerminalsDialog() }); } +function DirectPayment(){ + console.log("DirectPayment"); + $("#poslines").load("invoice.php?place"+place+"&action=valid&pay=trans("cash");?>", function() { + }); +} + $( document ).ready(function() { PrintCategories(0); LoadProducts(0); @@ -666,6 +672,10 @@ $menus[$r++]=array('title'=>''
'.$langs->trans("FreeZone").'
', 'action'=>'FreeZone();'); $menus[$r++]=array('title'=>'
'.$langs->trans("Payment").'
', 'action'=>'CloseBill();'); +if ($conf->global->TAKEPOS_DIRECT_PAYMENT){ + $menus[$r++]=array('title'=>'
'.$langs->trans("DirectPayment").'
', 'action'=>'DirectPayment();'); +} + // BAR RESTAURANT specific menu if ($conf->global->TAKEPOS_BAR_RESTAURANT) { From d2d7fb4b04e21f6b6a2025f57c6ef8fc7206a5a1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 21 Aug 2019 03:38:57 +0200 Subject: [PATCH 626/798] Fix management of collapsing of extrafields separators. --- htdocs/core/class/extrafields.class.php | 29 ++++++++++++++---------- htdocs/core/tpl/extrafields_view.tpl.php | 8 ++++--- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 09130bb130a..c92ae311141 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1628,7 +1628,7 @@ 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') { @@ -1972,24 +1972,29 @@ class ExtraFields 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); + // Set the collapse_display status to cookie in priority or if ignorecollapsesetup is 1, if cookie and ignorecollapsesetup not defined, use the setup. + $collapse_display = ((isset($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) || GETPOST('ignorecollapsesetup', 'int')) ? ($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key] ? true : false) : ($extrafield_collapse_display_value == 2 ? false : true)); $extrafields_collapse_num = $this->attributes[$object->table_element]['pos'][$key]; + $out .= ''; $out .= ''; + +print $out; + pFooter($ok?0:1, $setuplang); if (isset($db) && is_object($db)) $db->close(); diff --git a/htdocs/install/step4.php b/htdocs/install/step4.php index 734d63fade9..342ec82d0fd 100644 --- a/htdocs/install/step4.php +++ b/htdocs/install/step4.php @@ -80,7 +80,7 @@ $db=getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf-> if ($db->ok) { print '
'; + print ''; print ''; print '\n"; +// Email template for send invoice +print '\n"; + $substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $htmltext = ''.$langs->trans("AvailableVariables").':
'; From c4b18890d952a2e1611d08b419ebf295c1db6c4c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:12:56 +0200 Subject: [PATCH 686/798] Update invoice.php --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 4737ecbde27..1e11161e8a1 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -511,7 +511,7 @@ print '
'.$sectionwithinvoicelink; print ''; print '
'; print ''; -print ''; +print ''; print "\n"; if ($placeid > 0) From 2be125e647daa8680559a7900cacac959b8a89c1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:47:17 +0200 Subject: [PATCH 687/798] Fix display context for takepos in invoice list fix for thirdparty name and create button --- htdocs/compta/facture/list.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 284b747465d..f0c10598f82 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -605,7 +605,7 @@ if ($resql) $massactionbutton=$form->selectMassAction('', $arrayofmassactions); $newcardbutton=''; - if($user->rights->facture->creer) + if($user->rights->facture->creer && $contextpage != 'poslist') { $newcardbutton.= dolGetButtonTitle($langs->trans('NewBill'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/compta/facture/card.php?action=create'); } @@ -1068,7 +1068,14 @@ if ($resql) if (! empty($arrayfields['s.nom']['checked'])) { print ''; if (! $i) $totalarray['nbfield']++; } From 7112fcee9a6031a93294f235f132f55a3ac65906 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:54:14 +0200 Subject: [PATCH 688/798] Update list.php --- 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 f0c10598f82..653f1182d78 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -687,7 +687,7 @@ if ($resql) $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields - if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); + if ($massactionbutton && $contextpage != 'poslist') $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); print '
'; print '
'; @@ -989,7 +989,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'.$langs->trans("LastContracts", ($num<=$MAXLIST?"":$MAXLIST)).'
'; + print '
'; print ''; print '\n"; if (! $i) $totalarray['nbfield']++; From 783e01588c1179eb65afd26ea4c1ff93b9ebcef9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:47:40 +0200 Subject: [PATCH 600/798] FIX It was possible to create cashfence without entering data. --- htdocs/compta/cashcontrol/cashcontrol_card.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 1fa95eb0b46..4f67f02d7f5 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -132,7 +132,16 @@ elseif ($action=="add") $error=0; foreach($arrayofpaymentmode as $key=>$val) { - $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); + if (GETPOST($key.'_amount', 'alpha') == '') + { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val)), null, 'errors'); + $action='start'; + $error++; + } + else + { + $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); + } } if (! $error) From cef88283b3dc96f12bb6e74a99c1e69e32187225 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:52:18 +0200 Subject: [PATCH 601/798] Fix missing error message --- htdocs/langs/en_US/cashdesk.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 8ba3bda053f..749c749293c 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 +SetupOfTerminalNotComplete=Setup of terminal %s is not complete \ No newline at end of file From 71be9f5b3f81c6c1de439ae6144095d3bd1a2532 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 21:01:17 +0200 Subject: [PATCH 602/798] Fix test on terminal for 'cashdesk' module --- htdocs/compta/cashcontrol/cashcontrol_card.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 4f67f02d7f5..fed2182e236 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -235,8 +235,15 @@ if ($action=="create" || $action=="start") $posmodule = GETPOST('posmodule', 'alpha'); $terminalid = GETPOST('posnumber', 'alpha'); $terminaltouse = $terminalid; + if ($terminaltouse == '1' && $posmodule=='cashdesk') $terminaltouse = ''; + if ($posmodule=='cashdesk' && $terminaltouse != '' && $terminaltouse != '1') { + $terminaltouse = ''; + setEventMessages($langs->trans("OnlyTerminal1IsAvailableForCashDeskModule"), null, 'errors'); + $error++; + } + // Calculate $initialbalanceforterminal for terminal 0 foreach($arrayofpaymentmode as $key => $val) { @@ -271,7 +278,7 @@ if ($action=="create" || $action=="start") } else { - setEventMessages($langs->trans("SetupOfTerminalNotComplete", $terminalid), null, 'errors'); + setEventMessages($langs->trans("SetupOfTerminalNotComplete", $terminaltouse), null, 'errors'); $error++; } } From 3a0057f6a30b9e0c62dfaf75e94f30ad91e8edf5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 23:59:24 +0200 Subject: [PATCH 603/798] FIX too many record in sql request. Whena criteria is a filter, we must use an inner join. --- htdocs/core/lib/company.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 3f1efad3bce..6230f2a545f 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1317,7 +1317,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= if (! empty($conf->agenda->enabled)) { // Recherche histo sur actioncomm - if (is_object($objcon) && $objcon->id) { + if (is_object($objcon) && $objcon->id > 0) { $sql = "SELECT DISTINCT a.id, a.label,"; } else @@ -1340,7 +1340,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; if (is_object($objcon) && $objcon->id) { - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."actioncomm_resources as r ON a.id = r.fk_actioncomm"; + $sql.= " INNER JOIN ".MAIN_DB_PREFIX."actioncomm_resources as r ON a.id = r.fk_actioncomm"; $sql.= " AND r.element_type = '" . $db->escape($objcon->table_element) . "' AND r.fk_element = " . $objcon->id; } From 2587dc041f947200b225b0b7ebb426496e1b34de Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 09:46:22 +0200 Subject: [PATCH 604/798] Minor CSS fix --- htdocs/theme/eldy/info-box.inc.php | 4 +++- htdocs/theme/md/info-box.inc.php | 4 +++- htdocs/theme/md/style.css.php | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index cff05f2b6a6..42a296e9a63 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -93,11 +93,13 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> overflow: hidden; text-overflow: ellipsis; } - .info-box-title{ text-transform: uppercase; font-weight: bold; } +.info-box-text{ + font-size: 0.92em; +} .info-box-text:first-letter{text-transform: uppercase} a.info-box-text{ text-decoration: none;} diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index df9b5c60d8e..de431a06310 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -73,11 +73,13 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> overflow: hidden; text-overflow: ellipsis; } - .info-box-title{ text-transform: uppercase; font-weight: bold; } +.info-box-text{ + font-size: 0.92em; +} .info-box-text:first-letter{text-transform: uppercase} a.info-box-text{ text-decoration: none;} diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 4787166e482..a160773d14b 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1746,6 +1746,9 @@ div.mainmenu { /* Do not load menu img if hidden to save bandwidth */ + global->MAIN_DISABLE_FONT_AWESOME_5)) { ?> + + div.mainmenu.home{ background-image: url(); From 6abfd8b145483ac448fa84c55fbcd31d9da487dc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 10:01:42 +0200 Subject: [PATCH 605/798] Fix use short labels for workboard --- htdocs/compta/bank/class/account.class.php | 2 +- .../paiement/cheque/class/remisecheque.class.php | 1 + htdocs/index.php | 15 --------------- htdocs/langs/en_US/banks.lang | 2 ++ htdocs/theme/eldy/info-box.inc.php | 8 ++++---- htdocs/theme/md/info-box.inc.php | 2 +- 6 files changed, 9 insertions(+), 21 deletions(-) diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index da136313393..282a296a5f1 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -1224,6 +1224,7 @@ class Account extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->bank->rappro->warning_delay/60/60/24; $response->label=$langs->trans("TransactionsToConciliate"); + $response->labelShort = $langs->trans("TransactionsToConciliateShort"); $response->url=DOL_URL_ROOT.'/compta/bank/list.php?leftmenu=bank&mainmenu=bank'; $response->img=img_object('', "payment"); @@ -1275,7 +1276,6 @@ class Account extends CommonObject $this->nb["banklines"]=$obj->nb; } $this->db->free($resql); - return 1; } else { diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index 26e3f2792d6..316215a5caf 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -527,6 +527,7 @@ class RemiseCheque extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->bank->cheque->warning_delay/60/60/24; $response->label=$langs->trans("BankChecksToReceipt"); + $response->labelShort=$langs->trans("BankChecksToReceiptShort"); $response->url=DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank'; $response->img=img_object('', "payment"); diff --git a/htdocs/index.php b/htdocs/index.php index 28c26965815..bf99db80d21 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -659,21 +659,6 @@ if ($showweather) $boxwork.=''; $boxwork.=''."\n"; -/*if ($showweather) -{ - $boxwork.=''; - $boxwork.=''; - $boxwork.=''; -}*/ - // Show dashboard $nbworkboardempty=0; $isIntopOpenedDashBoard = array(); diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index c77158e07b7..47295ec7e31 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -73,6 +73,7 @@ BankTransaction=Bank entry ListTransactions=List entries ListTransactionsByCategory=List entries/category TransactionsToConciliate=Entries to reconcile +TransactionsToConciliateShort=To reconcile Conciliable=Can be reconciled Conciliate=Reconcile Conciliation=Reconciliation @@ -116,6 +117,7 @@ DeleteCheckReceipt=Delete this check receipt? ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt? BankChecks=Bank checks BankChecksToReceipt=Checks awaiting deposit +BankChecksToReceiptShort=Checks awaiting deposit ShowCheckReceipt=Show check deposit receipt NumberOfCheques=No. of check DeleteTransaction=Delete entry diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 42a296e9a63..c5bd978144c 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -16,7 +16,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> margin-bottom: 15px; } .info-box.info-box-sm{ - min-height: 70px; + min-height: 80px; margin-bottom: 10px; } @@ -63,8 +63,8 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> background: rgba(0, 0, 0, 0.2); } .info-box-sm .info-box-icon{ - height: 70px; - width: 70px; + height: 80px; + width: 80px; font-size: 25px; line-height: 70px; } @@ -77,7 +77,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> } .info-box-sm .info-box-content{ - margin-left: 70px; + margin-left: 80px; } .info-box-number { display: block; diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index de431a06310..c58079b9b65 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -78,7 +78,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> font-weight: bold; } .info-box-text{ - font-size: 0.92em; + font-size: 12px; } .info-box-text:first-letter{text-transform: uppercase} a.info-box-text{ text-decoration: none;} From 21fc089f585c9ce48e70fcdf08db8c62e2d63e88 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 10:18:38 +0200 Subject: [PATCH 606/798] FIX Translation of month --- .../bookkeeping/balancebymonth.php | 18 ++++---------- htdocs/compta/resultat/clientfourn.php | 15 ------------ htdocs/compta/resultat/result.php | 24 +++++++++---------- htdocs/projet/jsgantt_language.js.php | 4 ++-- 4 files changed, 19 insertions(+), 42 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php index b9568228a36..1141accd476 100644 --- a/htdocs/accountancy/bookkeeping/balancebymonth.php +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -73,19 +73,11 @@ $y = $year_current; print '
'; @@ -1062,7 +1062,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'.$langs->trans("LastInterventions", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllInterventions").' '.$num.'
'; + print '
'; print ''; print ''; print ''; print ''; print ''; @@ -1772,7 +1772,7 @@ class FormFile print ''."\n"; print ''; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 9a39518dfb4..072d7f287a3 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -318,12 +318,12 @@ if (empty($reshook)) { { $error = 0; - if (!$_POST["lastname"]) { + if (! GETPOST("lastname", 'alpha')) { setEventMessages($langs->trans("NameNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; } - if (!$_POST["login"]) { + if (! GETPOST("login", 'alpha')) { setEventMessages($langs->trans("LoginNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; From 18eb2a83fe7c2d01bdb34cceec389a6f9541e1f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:41:53 +0200 Subject: [PATCH 579/798] FIX #11671 CVE-2019-15062 --- htdocs/core/actions_linkedfiles.inc.php | 8 +++----- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/user/card.php | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 297f7821599..16ba1669337 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -118,8 +118,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $link = new Link($db); - $link->id = $linkid; - $link->fetch(); + $link->fetch($linkid); $res = $link->delete($user); $langs->load('link'); @@ -153,8 +152,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $langs->load('link'); $link = new Link($db); - $link->id = GETPOST('linkid', 'int'); - $f = $link->fetch(); + $f = $link->fetch(GETPOST('linkid', 'int')); if ($f) { $link->url = GETPOST('link', 'alpha'); @@ -162,7 +160,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l { $link->url = 'http://' . $link->url; } - $link->label = GETPOST('label', 'alpha'); + $link->label = GETPOST('label', 'alphanohtml'); $res = $link->update($user); if (!$res) { diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 2b02ada6b47..a198fba4f98 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1757,7 +1757,7 @@ class FormFile print $langs->trans('Link') . ': '; print ''; print ''; print ''; print ''; @@ -1771,7 +1771,7 @@ class FormFile print ''."\n"; print ''; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index adcf094e7a4..460e345131c 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -309,12 +309,12 @@ if (empty($reshook)) { { $error = 0; - if (!$_POST["lastname"]) { + if (! GETPOST("lastname", 'alpha')) { setEventMessages($langs->trans("NameNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; } - if (!$_POST["login"]) { + if (! GETPOST("login", 'alpha')) { setEventMessages($langs->trans("LoginNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; From dd6007781a994de93d6338d5de4a63e8ae482d0d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 23:35:05 +0200 Subject: [PATCH 580/798] Update SECURITY.md --- SECURITY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 63620cf4bf4..a519fdd0fc6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,8 @@ | Version | Supported | | -------- | ------------------ | -| >= 9.0.* | :white_check_mark: | +| <= 8.0.* | :redwhite_check_mark: | +| >= 9.0.* | :x: | ## Reporting a Vulnerability From 789de97b4c9ff58db2f39a60e7060147d8b4ff4f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 23:35:27 +0200 Subject: [PATCH 581/798] Update SECURITY.md --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index a519fdd0fc6..d1d34f866bb 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,8 +4,8 @@ | Version | Supported | | -------- | ------------------ | -| <= 8.0.* | :redwhite_check_mark: | -| >= 9.0.* | :x: | +| <= 8.0.* | :x: | +| >= 9.0.* | :green_check_mark: | ## Reporting a Vulnerability From 334e2759a248711426f078f1b81ba6f45f9406b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 23:35:48 +0200 Subject: [PATCH 582/798] Update SECURITY.md --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index d1d34f866bb..e5493805733 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,7 +5,7 @@ | Version | Supported | | -------- | ------------------ | | <= 8.0.* | :x: | -| >= 9.0.* | :green_check_mark: | +| >= 9.0.* | :white_check_mark: | ## Reporting a Vulnerability From b1be6bf4f237089f34264568782a7406670cfae4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 01:24:54 +0200 Subject: [PATCH 583/798] FIX #11422 Can't edit his own events with standard rights --- htdocs/comm/action/class/actioncomm.class.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index fd91864af04..392cd9255d9 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1262,10 +1262,12 @@ 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)) - $option = 'nolink'; + if ((!$user->rights->agenda->allactions->read && $this->authorid != $user->id) || (!$user->rights->agenda->myactions->read && $this->authorid == $user->id)) + { + $option = 'nolink'; + } - $label = $this->label; + $label = $this->label; if (empty($label)) $label=$this->libelle; // For backward compatibility $result=''; From 2285e0d78037703338024ebe967ec2176bd97f04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 02:07:40 +0200 Subject: [PATCH 584/798] Make colors less aggressive --- htdocs/index.php | 6 +++++- htdocs/theme/eldy/global.inc.php | 5 ++++- htdocs/theme/eldy/info-box.inc.php | 14 +++++++------- htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- htdocs/theme/md/style.css.php | 4 ++++ 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index b7eebe24063..4cd58ea6495 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -768,7 +768,11 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard= '
'."\n"; $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.= ' '."\n"; + $weatherDashBoard.= ' '; + + $weatherDashBoard.= ' '; + + $weatherDashBoard.= ' '."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 1c49ab1053c..b065fb26937 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3414,6 +3414,10 @@ a.impayee:hover { font-weight: bold; color: #550000; } * Other */ +.opened-dash-board-wrap { + margin-bottom: 25px; +} + div.boximport { min-height: unset; } @@ -5250,7 +5254,6 @@ div.tabsElem a.tab { } - /* ============================================================================== */ /* Public */ /* ============================================================================== */ diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 7aa00c2fade..3159428ce0a 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -120,32 +120,32 @@ a.info-box-text{ text-decoration: none;} background-color: #605ca8 !important; } .bg-infoxbox-action{ - background-color: #d81b60 !important; + background-color: #d84b80 !important; } .bg-infoxbox-propal, .bg-infoxbox-facture, .bg-infoxbox-commande{ - background-color: #dd4b39 !important; + background-color: #abb87b !important; } .bg-infoxbox-supplier_proposal, .bg-infoxbox-invoice_supplier, .bg-infoxbox-order_supplier{ - background-color: #00c0ef !important; + background-color: #40b0cf !important; } .bg-infoxbox-contrat{ - background-color: #00a65a !important; + background-color: #20a68a !important; } .bg-infoxbox-bank_account{ - background-color: #f39c12 !important; + background-color: #e39c42 !important; } .bg-infoxbox-adherent{ //background-color: #f39c12 !important; } .bg-infoxbox-expensereport{ - background-color: #a55114 !important; + background-color: #755114 !important; } .bg-infoxbox-holiday{ - background-color: #cbd81b !important; + background-color: #755114 !important; } diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index cbf1ab000be..05417b11bc7 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -78,9 +78,9 @@ $toolTipFontColor='#333'; $badgePrimary ='#007bff'; $badgeSecondary ='#999999'; $badgeSuccess ='#28a745'; -$badgeDanger ='#dc3545'; +$badgeDanger ='#9f4705'; $badgeWarning ='#ffc107'; -$badgeInfo ='#17a2b8'; +$badgeInfo ='#aaaabb'; $badgeDark ='#343a40'; $badgeLight ='#f8f9fa'; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index c63c38af33a..4329bedde81 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3449,6 +3449,10 @@ a.impayee:hover { font-weight: bold; color: #550000; } * Other */ +.opened-dash-board-wrap { + margin-bottom: 25px; +} + div.boximport { min-height: unset; } From b8e1cc8d163b783b240270c4d0f96ce01e86e285 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 03:42:38 +0200 Subject: [PATCH 585/798] Enhance #11643 --- htdocs/admin/delais.php | 38 +++++++++++----------- htdocs/core/lib/functions.lib.php | 10 ++++-- htdocs/core/lib/functions2.lib.php | 50 ++++++++++++++++++++++++++-- htdocs/index.php | 4 +-- htdocs/main.inc.php | 11 ++++--- htdocs/theme/eldy/info-box.inc.php | 23 +++++++------ htdocs/theme/md/info-box.inc.php | 52 ++++++++++++++++-------------- 7 files changed, 122 insertions(+), 66 deletions(-) diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index 6b46468b916..91e34e66d94 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -195,7 +195,6 @@ if ($action == 'edit') { foreach($delays as $delay) { - $value=(! empty($conf->global->{$delay['code']})?$conf->global->{$delay['code']}:0); print '
'; print ''; @@ -235,7 +234,6 @@ else { foreach($delays as $delay) { - $value=(! empty($conf->global->{$delay['code']})?$conf->global->{$delay['code']}:0); print ''; print ''; @@ -300,16 +298,16 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '= '; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<= '; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<= '; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<= '; print '
'; print '
'; @@ -320,16 +318,16 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '=  %'; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<=  %'; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<=  %'; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<=  %'; print '
'; print '
'; @@ -371,19 +369,19 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL0.' %'; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL1.' %'; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL2.' %'; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL3.' %'; print '
'; - print img_weather($text, 'weather-storm.png', $options); + print img_weather($text, 4, $options); print '> '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL3.' %'; print '
'; print '
'; @@ -391,19 +389,19 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '= '.$level0; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<= '.$level1; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<= '.$level2; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<= '.$level3; print '
'; - print img_weather($text, 'weather-storm.png', $options); + print img_weather($text, 4, $options); print '> '.$level3; print '
'; print '
'; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e851509a000..e6a93b99ea4 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3225,7 +3225,7 @@ function img_object($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, * Show weather picto * * @param string $titlealt Text on alt and title of image. Alt only if param notitle is set to 1. If text is "TextA:TextB", use Text A on alt and Text B on title. - * @param string $picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory. + * @param string|int $picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory. Or level of meteo image (0-4). * @param string $moreatt Add more attribute on img tag * @param int $pictoisfullpath If 1, image path is a full path * @param string $morecss More CSS @@ -3236,7 +3236,13 @@ function img_weather($titlealt, $picto, $moreatt = '', $pictoisfullpath = 0, $mo { global $conf; - if (! preg_match('/(\.png|\.gif)$/i', $picto)) $picto .= '.png'; + if (is_numeric($picto)) + { + $leveltopicto=array(0=>'weather-clear.png', 1=>'weather-few-clouds.png', 2=>'weather-clouds.png', 3=>'weather-many-clouds.png', 4=>'weather-storm.png'); + //return ''; + $picto = $leveltopicto[$picto]; + } + elseif (! preg_match('/(\.png|\.gif)$/i', $picto)) $picto .= '.png'; $path = DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/weather/'.$picto; diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index b4c8f6bf011..9363956d764 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2251,9 +2251,53 @@ function colorValidateHex($color, $allow_white = true) /** - * @param string $hex color in hex - * @param integer $steps Steps should be between -255 and 255. Negative = darker, positive = lighter - * @return string + * Change color to make it less aggressive (ratio is negative) or more aggressive (ratio is positive) + * + * @param string $hex Color in hex ('#AA1122' or 'AA1122' or '#a12' or 'a12') + * @param integer $ratio Default=-50. Note: 0=Component color is unchanged, -100=Component color become 88, +100=Component color become 00 or FF + * @return string New string of color + * @see colorAdjustBrightness() + */ +function colorAgressivity($hex, $ratio = -50) +{ + // Steps should be between -255 and 255. Negative = darker, positive = lighter + $ratio = max(-100, min(100, $ratio)); + + // Normalize into a six character long hex string + $hex = str_replace('#', '', $hex); + if (strlen($hex) == 3) { + $hex = str_repeat(substr($hex, 0, 1), 2).str_repeat(substr($hex, 1, 1), 2).str_repeat(substr($hex, 2, 1), 2); + } + + // Split into three parts: R, G and B + $color_parts = str_split($hex, 2); + $return = '#'; + + foreach ($color_parts as $color) { + $color = hexdec($color); // Convert to decimal + if ($ratio > 0) // We increase aggressivity + { + if ($color > 127) $color += ((255 - $color) * ($ratio / 100)); + if ($color < 128) $color -= ($color * ($ratio / 100)); + } + else // We decrease agressivity + { + if ($color > 128) $color -= (($color - 128) * (abs($ratio) / 100)); + if ($color < 127) $color += ((128 - $color) * (abs($ratio) / 100)); + } + $color = max(0, min(255, $color)); // Adjust color + $return .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); // Make two char hex code + } + + //var_dump($hex.' '.$ratio.' -> '.$return); + return $return; +} + +/** + * @param string $hex Color in hex ('#AA1122' or 'AA1122' or '#a12' or 'a12') + * @param integer $steps Step/offset added to each color component. It should be between -255 and 255. Negative = darker, positive = lighter + * @return string New color with format '#AA1122' + * @see colorAgressivity() */ function colorAdjustBrightness($hex, $steps) { diff --git a/htdocs/index.php b/htdocs/index.php index 4cd58ea6495..d8a8ffab17d 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -769,9 +769,7 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard= '
'."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '; - - $weatherDashBoard.= ' '; - + $weatherDashBoard.= img_weather('', $weather->level, '', 0, 'valignmiddle width50'); $weatherDashBoard.= ' '."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 7c11e6d10a7..a9d217e3df5 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1258,11 +1258,12 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr $themeparam='?lang='.$langs->defaultlang.'&theme='.$conf->theme.(GETPOST('optioncss', 'aZ09')?'&optioncss='.GETPOST('optioncss', 'aZ09', 1):'').'&userid='.$user->id.'&entity='.$conf->entity; $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'); } - if (GETPOST('dol_optimize_smallscreen', 'int')) { $themeparam.='&dol_optimize_smallscreen='.GETPOST('dol_optimize_smallscreen', 'int'); } - if (GETPOST('dol_no_mouse_hover', 'int')) { $themeparam.='&dol_no_mouse_hover='.GETPOST('dol_no_mouse_hover', 'int'); } - if (GETPOST('dol_use_jmobile', 'int')) { $themeparam.='&dol_use_jmobile='.GETPOST('dol_use_jmobile', 'int'); $conf->dol_use_jmobile=GETPOST('dol_use_jmobile', 'int'); } + if (GETPOSTISSET('dol_hide_topmenu')) { $themeparam.='&dol_hide_topmenu='.GETPOST('dol_hide_topmenu', 'int'); } + if (GETPOSTISSET('dol_hide_leftmenu')) { $themeparam.='&dol_hide_leftmenu='.GETPOST('dol_hide_leftmenu', 'int'); } + if (GETPOSTISSET('dol_optimize_smallscreen')) { $themeparam.='&dol_optimize_smallscreen='.GETPOST('dol_optimize_smallscreen', 'int'); } + if (GETPOSTISSET('dol_no_mouse_hover')) { $themeparam.='&dol_no_mouse_hover='.GETPOST('dol_no_mouse_hover', 'int'); } + if (GETPOSTISSET('dol_use_jmobile')) { $themeparam.='&dol_use_jmobile='.GETPOST('dol_use_jmobile', 'int'); $conf->dol_use_jmobile=GETPOST('dol_use_jmobile', 'int'); } + if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) { $themeparam.='&THEME_AGRESSIVITY_RATIO='.GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); } if (! defined('DISABLE_JQUERY') && ! $disablejs && $conf->use_javascript_ajax) { diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 3159428ce0a..33bbfdf3491 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -116,36 +116,41 @@ a.info-box-text{ text-decoration: none;} color: #fff !important; } +global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-75; +if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); +?> .bg-infoxbox-project{ - background-color: #605ca8 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-action{ - background-color: #d84b80 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-propal, .bg-infoxbox-facture, .bg-infoxbox-commande{ - background-color: #abb87b !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-supplier_proposal, .bg-infoxbox-invoice_supplier, .bg-infoxbox-order_supplier{ - background-color: #40b0cf !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-contrat{ - background-color: #20a68a !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-bank_account{ - background-color: #e39c42 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-adherent{ - //background-color: #f39c12 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-expensereport{ - background-color: #755114 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-holiday{ - background-color: #755114 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index 827a38738a4..c02ffef410b 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -95,39 +95,43 @@ a.info-box-text{ text-decoration: none;} .info-box-icon { color: #000 !important; } -/* -.bg-infoxbox-project{ - background-color: #605ca8 !important; +global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-100; +if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); +?> +.bg-infoxbox-project i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-action{ - background-color: #d81b60 !important; +.bg-infoxbox-action i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-propal, -.bg-infoxbox-facture, -.bg-infoxbox-commande{ - background-color: #dd4b39 !important; +.bg-infoxbox-propal i.fa, +.bg-infoxbox-facture i.fa, +.bg-infoxbox-commande i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-supplier_proposal, -.bg-infoxbox-invoice_supplier, -.bg-infoxbox-order_supplier{ - background-color: #00c0ef !important; +.bg-infoxbox-supplier_proposal i.fa, +.bg-infoxbox-invoice_supplier i.fa, +.bg-infoxbox-order_supplier i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-contrat{ - background-color: #00a65a !important; +.bg-infoxbox-contrat i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-bank_account{ - background-color: #f39c12 !important; +.bg-infoxbox-bank_account i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-adherent{ - //background-color: #f39c12 !important; +.bg-infoxbox-adherent i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-expensereport{ - background-color: #a55114 !important; +.bg-infoxbox-expensereport i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-holiday{ - background-color: #cbd81b !important; +.bg-infoxbox-holiday i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -*/ + .fa-dol-action:before { content: "\f073"; From 3f105a97bf4aa70ec6528046176279ea18833315 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 04:56:48 +0200 Subject: [PATCH 586/798] Debug the new workboard --- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/commande/class/commande.class.php | 2 +- htdocs/core/lib/functions2.lib.php | 18 +++---- .../class/fournisseur.commande.class.php | 2 +- htdocs/index.php | 51 ++++++++----------- htdocs/langs/en_US/main.lang | 1 + .../class/supplier_proposal.class.php | 4 +- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/eldy/info-box.inc.php | 2 +- htdocs/theme/eldy/theme_vars.inc.php | 19 ++++--- htdocs/theme/md/info-box.inc.php | 2 +- htdocs/theme/md/theme_vars.inc.php | 19 ++++--- 12 files changed, 60 insertions(+), 64 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index f1a6d4eb466..49173eff5fd 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3273,7 +3273,7 @@ class Propal extends CommonObject $delay_warning=$conf->propal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("PropalsToClose"); - $labelShort = $langs->trans("ToClose"); + $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { $delay_warning=$conf->propal->facturation->warning_delay; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index f9662a562f2..de93ff778c4 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3412,7 +3412,7 @@ class Commande extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->client->warning_delay/60/60/24; $response->label=$langs->trans("OrdersToProcess"); - $response->labelShort = $langs->trans("ToProcess"); + $response->labelShort = $langs->trans("Opened"); $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders'; $response->img=img_object('', "order"); diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 9363956d764..72bdce0f524 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2199,7 +2199,7 @@ function fetchObjectByElement($element_id, $element_type, $element_ref = '') * @param array $arraycolor Array * @param string $colorifnotfound Color code to return if entry not defined or not a RGB format * @return string RGB hex value (without # before). For example: 'FF00FF', '01FF02' - * @see colorStringToArray() + * @see colorStringToArray(), colorHexToRgb() */ function colorArrayToHex($arraycolor, $colorifnotfound = '888888') { @@ -2216,7 +2216,7 @@ function colorArrayToHex($arraycolor, $colorifnotfound = '888888') * @param string $stringcolor String with hex (FFFFFF) or comma RGB ('255,255,255') * @param array $colorifnotfound Color code array to return if entry not defined * @return array RGB hex value (without # before). For example: FF00FF - * @see colorArrayToHex() + * @see colorArrayToHex(), colorHexToRgb() */ function colorStringToArray($stringcolor, $colorifnotfound = array(88,88,88)) { @@ -2233,13 +2233,12 @@ function colorStringToArray($stringcolor, $colorifnotfound = array(88,88,88)) } /** - * @param string $color the color you need to valid - * @param boolean $allow_white in case of white isn't valid + * @param string $color the color you need to valid + * @param boolean $allow_white in case of white isn't valid * @return boolean */ function colorValidateHex($color, $allow_white = true) { - if(!$allow_white && ($color === '#fff' || $color === '#ffffff') ) return false; if(preg_match('/^#[a-f0-9]{6}$/i', $color)) //hex color is valid @@ -2249,7 +2248,6 @@ function colorValidateHex($color, $allow_white = true) return false; } - /** * Change color to make it less aggressive (ratio is negative) or more aggressive (ratio is positive) * @@ -2347,10 +2345,10 @@ function colorLighten($hex, $percent) /** - * @param string $hex color in hex - * @param float $alpha 0 to 1 - * @param bool $returnArray set to 1 to return an array instead of string - * @return string|array + * @param string $hex color in hex + * @param float $alpha 0 to 1 to add alpha channel + * @param bool $return Array set to 1 to return an array instead of string + * @return string|array String or array */ function colorHexToRgb($hex, $alpha = false, $returnArray = false) { diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index a77206d5f42..2edd86d1c10 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -2835,7 +2835,7 @@ class CommandeFournisseur extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SuppliersOrdersToProcess"); - $response->labelShort=$langs->trans("ToProcess"); + $response->labelShort=$langs->trans("Opened"); $response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3&mainmenu=commercial&leftmenu=orders_suppliers'; $response->img=img_object('', "order"); diff --git a/htdocs/index.php b/htdocs/index.php index d8a8ffab17d..28c26965815 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -538,36 +538,36 @@ $dashboardgroup = array ( 'stats' => array ('propal_opened','propal_signed'), ), - 'supplier_proposal' => - array ( - 'groupName' => 'SupplierProposals', - 'stats' => - array ('supplier_proposal_opened','supplier_proposal_signed'), - ), 'commande' => array ( 'groupName' => 'Orders', 'stats' => array ('commande'), ), - 'order_supplier' => - array ( - 'groupName' => 'SuppliersOrders', - 'stats' => - array ('order_supplier'), - ), - 'contrat' => - array ( - 'groupName' => 'Contracts', - 'stats' => - array ('contrat_inactive','contrat_active'), - ), 'facture' => array ( 'groupName' => 'Invoices', 'stats' => array ('facture'), ), + 'contrat' => + array ( + 'groupName' => 'Contracts', + 'stats' => + array ('contrat_inactive','contrat_active'), + ), + 'supplier_proposal' => + array ( + 'groupName' => 'SupplierProposals', + 'stats' => + array ('supplier_proposal_opened','supplier_proposal_signed'), + ), + 'order_supplier' => + array ( + 'groupName' => 'SuppliersOrders', + 'stats' => + array ('order_supplier'), + ), 'invoice_supplier' => array ( 'groupName' => 'BillsSuppliers', @@ -580,12 +580,6 @@ $dashboardgroup = array ( 'stats' => array ('bank_account','RemiseCheque'), ), - /*'RemiseCheque' => - array ( - 'groupName' => 'BankChecks', - 'stats' => - array ('RemiseCheque'), - ),*/ 'Adherent' => array ( 'groupName' => 'Members', @@ -713,8 +707,7 @@ if (!empty($valid_dashboardlines)) $openedDashBoard.= '
'."\n"; $openedDashBoard.= ' '."\n"; $openedDashBoard.= '
'."\n"; - - $openedDashBoard .= ' '.$groupName.'' . "\n"; + $openedDashBoard .= ' '.$groupName.'' . "\n"; foreach($boards as $board) { if(!empty($board->labelShort)){ @@ -764,8 +757,6 @@ if (!empty($valid_dashboardlines)) else $text=$langs->transnoentitiesnoconv("NoItemLate"); $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); - - $weatherDashBoard= '
'."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '; @@ -774,13 +765,13 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; - if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)){ + if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) { $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", price($totallatePercentage).'%').'' . "\n"; $weatherDashBoard.= ' '.$langs->trans('NActionsLate', $totalLateNumber).'' . "\n"; } else{ $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", $totalLateNumber).'' . "\n"; - if($totallatePercentage>0){ + if($totallatePercentage>0) { $weatherDashBoard.= ' '.$langs->trans('NActionsLate', price($totallatePercentage).'%').'' . "\n"; } } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 099cc9a5a12..5c3e30967de 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -989,3 +989,4 @@ ToApprove=To approve GlobalOpenedElemView=Global view NoArticlesFoundForTheKeyword=No article found for the keyword '%s' NoArticlesFoundForTheCategory=No article found for the category +ToAcceptRefuse=To accept | refuse \ No newline at end of file diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 0cab8e5b995..3748aede1c7 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -2279,13 +2279,13 @@ class SupplierProposal extends CommonObject $delay_warning=$conf->supplier_proposal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); - $labelShort = $langs->trans("ToClose"); + $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { $delay_warning=$conf->supplier_proposal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered - $labelShort = $langs->trans("ToProcess"); + $labelShort = $langs->trans("ToClose"); } $response = new WorkboardResponse(); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index b065fb26937..abff6a60a44 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3255,7 +3255,7 @@ span.dashboardlineko { vertical-align: middle; } .boxtable { - margin-bottom: 8px !important; + margin-bottom: 25px !important; border-bottom-width: 1px; border-top: px solid rgb(); diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 33bbfdf3491..95478023771 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -117,7 +117,7 @@ a.info-box-text{ text-decoration: none;} } global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-75; if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); ?> diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 05417b11bc7..0902a2eaa75 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -33,16 +33,19 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); $theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); -if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +if (! defined('ISLOADEDBYSTEELSHEET')) // File is run after an include of a php page, not by the style sheet, if the constant is not defined. { - if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250, 190, 30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); - } - else - { - // for now we use the same configuration for all types of color blind - $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250, 190, 30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } } } diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index c02ffef410b..7cd5222934a 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -96,7 +96,7 @@ a.info-box-text{ text-decoration: none;} color: #000 !important; } global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-100; if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); ?> diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 7057a65b8c3..5c27b419820 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -29,16 +29,19 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); $theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); -if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +if (! defined('ISLOADEDBYSTEELSHEET')) // File is run after an include of a php page, not by the style sheet, if the constant is not defined. { - if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); - } - else - { - // for now we use the same configuration for all types of color blind - $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } } } $theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4')); From 75792ea42c49897c1e267c95fa46ef8cac22db02 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 05:33:40 +0200 Subject: [PATCH 587/798] Fix css --- htdocs/theme/eldy/info-box.inc.php | 2 +- htdocs/theme/md/info-box.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 95478023771..e2d11389c7b 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -191,7 +191,7 @@ if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RA /* USING FONTAWESOME FOR WEATHER */ .info-box-weather .info-box-icon{ - background: rgba(0, 0, 0, 0); !important; + background: rgba(0, 0, 0, 0.08) !important; } .fa-weather-level0:before{ content: "\f185"; diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index 7cd5222934a..df9b5c60d8e 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -170,7 +170,7 @@ if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RA /* USING FONTAWESOME FOR WEATHER */ .info-box-weather .info-box-icon{ - background: rgba(0, 0, 0, 0); !important; + background: #eee !important; } .fa-weather-level0:before{ content: "\f185"; From 58573632aba90c1f594edfbc0cbd5fe917cc4f10 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 06:00:33 +0200 Subject: [PATCH 588/798] Fix css --- htdocs/theme/eldy/global.inc.php | 5 +++++ htdocs/theme/md/style.css.php | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index abff6a60a44..7638b083a97 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5586,6 +5586,11 @@ div.tabsElem a.tab { border-right: none; border-left: none; } + + .box-flex-container { + margin: 0 0 0 -8px !important; + } + } @media only screen and (max-width: 1024px) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 4329bedde81..4787166e482 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -5570,6 +5570,10 @@ border-top-right-radius: 6px; border-left: none; } + .box-flex-container { + margin: 0 0 0 -8px !important; + } + } @media only screen and (max-width: 1024px) From 40f5bbc4bb0857edb14b945d8a81b90e49029ca2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 07:05:49 +0200 Subject: [PATCH 589/798] Fix css --- htdocs/theme/eldy/info-box.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index e2d11389c7b..cff05f2b6a6 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -268,6 +268,8 @@ if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RA height: 0; } +/* Disabled. This break the responsive on smartphone .box{ overflow: visible; } +*/ From 063f19fe6768f7186b2f5913c6f74f5350d71d4c Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 18 Aug 2019 09:33:02 +0200 Subject: [PATCH 590/798] Cashcontrol TakePOS fixes --- htdocs/compta/cashcontrol/cashcontrol_card.php | 15 +++------------ htdocs/compta/cashcontrol/report.php | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 378d6087cc7..1fa95eb0b46 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -88,7 +88,7 @@ if (empty($backtopage)) $backtopage = dol_buildpath('/compta/cashcontrol/cashcon $backurlforlist = dol_buildpath('/compta/cashcontrol/cashcontrol_list.php', 1); $triggermodname = 'CACHCONTROL_MODIFY'; // Name of trigger action code to execute when we modify record -if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH)) +if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) && empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH1)) { setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors'); } @@ -132,16 +132,7 @@ elseif ($action=="add") $error=0; foreach($arrayofpaymentmode as $key=>$val) { - if (GETPOST($key.'_amount', 'alpha') == '') - { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val)), null, 'errors'); - $action='start'; - $error++; - } - else - { - $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); - } + $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); } if (! $error) @@ -235,7 +226,7 @@ if ($action=="create" || $action=="start") $posmodule = GETPOST('posmodule', 'alpha'); $terminalid = GETPOST('posnumber', 'alpha'); $terminaltouse = $terminalid; - if ($terminaltouse == '1') $terminaltouse = ''; + if ($terminaltouse == '1' && $posmodule=='cashdesk') $terminaltouse = ''; // Calculate $initialbalanceforterminal for terminal 0 foreach($arrayofpaymentmode as $key => $val) diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 6584af5db98..ce0cdeed9fb 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -196,10 +196,18 @@ if ($resql) // Bank account print '
\n"; if (! $i) $totalarray['nbfield']++; From 2ddf7c1d1f4e706a7477c8471be91d6b6a4699c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 17:03:20 +0200 Subject: [PATCH 591/798] Fix responsive --- 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 b9b0204bf7e..65464d724b1 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1827,11 +1827,11 @@ function top_menu_user(User $user, Translate $langs) } else $appli.=" ".DOL_VERSION; - $btnUser = ' + $btnUser = ' '; - // Other attributes + // 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; @@ -639,12 +654,12 @@ else print ''; print ''; } From ad5f2dbe9d36de1e7610eeb856debd6955208f20 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 18:56:58 +0200 Subject: [PATCH 594/798] Fix update on id --- htdocs/compta/bank/class/account.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 89a05f3e215..453e7dd5a80 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -749,7 +749,6 @@ class Account extends CommonObject $sql.= ",fk_pays = ".$this->country_id; $sql.= " WHERE rowid = ".$this->id; - $sql.= " AND entity = ".$conf->entity; dol_syslog(get_class($this)."::update", LOG_DEBUG); $result = $this->db->query($sql); From d8d927547f4680dcd007f63236fea6788405fd65 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 19:09:53 +0200 Subject: [PATCH 595/798] Fix option ACCOUNTANCY_SHOW_EXPORT_FILES_MENU --- 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 4522d9067e0..b1c3111034f 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1330,7 +1330,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM if (! empty($conf->comptabilite->enabled)) { // 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"), 0, $user->rights->compta->resultat->lire, '', $mainmenu, 'files'); } From 477384105f0a1127bf183252709cc2ea62fb7f8d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 19:25:36 +0200 Subject: [PATCH 596/798] FIX missing test on permission on button to delete ledger record --- htdocs/accountancy/bookkeeping/list.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 05561f4a9d5..e67b19991b0 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -855,10 +855,12 @@ print "
'; @@ -1167,7 +1167,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'.$langs->trans("LatestCustomerTemplateInvoices", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllCustomerTemplateInvoices").' '.$num.'
'; + print '
'; print ''; print ''; } diff --git a/htdocs/website/samples/page-sample-corporatehome.html b/htdocs/website/samples/page-sample-corporatehome.html deleted file mode 100644 index a6e4e64c871..00000000000 --- a/htdocs/website/samples/page-sample-corporatehome.html +++ /dev/null @@ -1,15 +0,0 @@ -
-

__[MAIN_INFO_SOCIETE_NOM]__


-__(MyContainerTitle)__ -
-
-
-
-
__(AnotherContainer)__
-
-
-
-
-
__WEBSITE_CREATE_BY__
-
-
\ No newline at end of file diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html new file mode 100644 index 00000000000..fa83d501350 --- /dev/null +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -0,0 +1,44 @@ + +
+
+__(MyContainerTitle)__ +

+
+ + +
+This is example of dynamic content to get the name of your company (see source of page to see code):
+
+

+name; ?> +
+

+ + +
+This is another example of dynamic content to get meta data of a container/page (see source of page to see code):
+
+
+__(Title)__ : title; ?>
+__(Description)__ : description; ?>
+__(Keywords)__ : keywords; ?>
+__(DateCreation)__ : date_creation, 'dayhour', $weblangs); ?>
+
+
+ + +
+__(AnotherContainer)__ +
+
+ +
+ + +
+

+__(YouCanEditHtmlSource)__ +

+Page created by __WEBSITE_CREATE_BY__ +
+
diff --git a/htdocs/website/samples/page-sample-empty.html b/htdocs/website/samples/page-sample-empty.html index f8dac27cdb2..06615c48265 100644 --- a/htdocs/website/samples/page-sample-empty.html +++ b/htdocs/website/samples/page-sample-empty.html @@ -1,3 +1,3 @@ - -
-
+ +
+
From 3dedb2149af70122f65d286f20274d9c1335c3a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:12:40 +0200 Subject: [PATCH 525/798] Fix edit inline of sections --- .../samples/page-sample-dynamiccontent.html | 20 +++++++++---------- htdocs/website/samples/page-sample-empty.html | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html index fa83d501350..41355f1b29b 100644 --- a/htdocs/website/samples/page-sample-dynamiccontent.html +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -1,23 +1,23 @@ -
+

__(MyContainerTitle)__

-
+ -
+
This is example of dynamic content to get the name of your company (see source of page to see code):
-
+

name; ?>

-
+
This is another example of dynamic content to get meta data of a container/page (see source of page to see code):
-
+
__(Title)__ : title; ?>
__(Description)__ : description; ?>
@@ -27,18 +27,18 @@ __(DateCreation)__ : date_creation, 'day
-
+
__(AnotherContainer)__ -
+
-
+


__(YouCanEditHtmlSource)__

Page created by __WEBSITE_CREATE_BY__
-
+ diff --git a/htdocs/website/samples/page-sample-empty.html b/htdocs/website/samples/page-sample-empty.html index 06615c48265..8caea620d80 100644 --- a/htdocs/website/samples/page-sample-empty.html +++ b/htdocs/website/samples/page-sample-empty.html @@ -1,3 +1,3 @@ -
-
+
+
From a346b052e7aa2d711c22bbd1cea9fba73ec03af0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:37:57 +0200 Subject: [PATCH 526/798] Enhance help --- htdocs/langs/en_US/website.lang | 1 + htdocs/website/index.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index edcc6ae1593..d9bc082de09 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -44,6 +44,7 @@ RealURL=Real URL ViewWebsiteInProduction=View web site using home URLs SetHereVirtualHost=Use with Apache/NGinx/...
If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on
%s
then set the name of the virtual host you have created in the properties of web site, so the preview can be done also using this dedicated web server access instead of the internal Dolibarr server. YouCanAlsoTestWithPHPS=Use with PHP embedded server
On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running
php -S 0.0.0.0:8080 -t %s +YouCanAlsoDeployToAnotherWHP=Run your web site with another Dolibarr Hosting provider
If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on https://saas.dolibarr.org CheckVirtualHostPerms=Check also that virtual host has permission %s on files into
%s ReadPerm=Read WritePerm=Write diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 484caf99ba6..c723b71429e 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2038,6 +2038,9 @@ if (! GETPOST('hide_websitemenu')) $htmltext.='
'; $htmltext.='
'; $htmltext.=$langs->trans("YouCanAlsoTestWithPHPS", $dataroot); + $htmltext.='
'; + $htmltext.='
'; + $htmltext.=$langs->trans("YouCanAlsoDeployToAnotherWHP"); } print $form->textwithpicto($linktotestonwebserver, $htmltext, 1, 'none', 'valignmiddle', 0, 2, 'helpvirtualhost'); print ''; From ffece8dd346d7adcf5ec85e1e81b631f9d8518fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:46:48 +0200 Subject: [PATCH 527/798] Better link for syntax help --- htdocs/core/class/html.form.class.php | 2 +- htdocs/website/index.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index e829fdf6661..9618c722dd6 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -523,7 +523,7 @@ class Form * @param string $extracss Add a CSS style to td, div or span tag * @param int $noencodehtmltext Do not encode into html entity the htmltext * @param int $notabs 0=Include table and tr tags, 1=Do not include table and tr tags, 2=use div, 3=use span - * @param string $tooltiptrigger ''=Tooltip on hover, 'abc'=Tooltip on click (abc is a unique key) + * @param string $tooltiptrigger ''=Tooltip on hover, 'abc'=Tooltip on click (abc is a unique key, clickable link is on image or on link if param $type='none') * @param int $forcenowrap Force no wrap between text and picto (works with notabs=2 only) * @return string HTML code of text, picto, tooltip */ diff --git a/htdocs/website/index.php b/htdocs/website/index.php index c723b71429e..93b06619f8c 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2393,7 +2393,8 @@ if (! GETPOST('hide_websitemenu')) } else { - print $form->textwithpicto($langs->trans("SyntaxHelp"), $htmltext, 1, 'help', 'inline-block', 1, 2, 'tooltipsubstitution'); + //img_help(($tooltiptrigger != '' ? 2 : 1), $alt) + print $form->textwithpicto($langs->trans("SyntaxHelp").' '.img_help(2, $langs->trans("SyntaxHelp")), $htmltext, 1, 'none', 'inline-block', 1, 2, 'tooltipsubstitution'); } } print ''; // end websitehelp From 056626b8e34a5be28b6ad69357a960900fff2183 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:59:08 +0200 Subject: [PATCH 528/798] Nicer toolbar for website menu --- htdocs/theme/eldy/global.inc.php | 6 ++++++ htdocs/theme/md/style.css.php | 6 ++++++ htdocs/website/index.php | 36 ++++++++++++++++---------------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index b05968356ce..a16b20e84a0 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3739,6 +3739,12 @@ tr.visible { background-color: transparent; background-image: none; } +.bordertransp { + background-color: transparent; + background-image: none; + border: 1px solid #aaa; + font-weight: normal; +} .websitebar { border-bottom: 1px solid #ccc; background: #e6e6e6; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 8999a73aaea..6f6d1338deb 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3935,6 +3935,12 @@ tr.visible { color: #000 !important; text-shadow: none; } +.bordertransp { + background-color: transparent; + background-image: none; + border: 1px solid #aaa; + font-weight: normal; +} .websitebar { border-bottom: 1px solid #ccc; background: #eee; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 93b06619f8c..46121913c2b 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1954,27 +1954,27 @@ if (! GETPOST('hide_websitemenu')) print '   '; - print ''; + print ''; if (! $atleastonepage) { - print ''; + print ''; } else { - print ''; + print ''; } //print ''; - print ''; - print ''; + print ''; + print ''; - print ''; + print ''; print '   '; - print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("MediaFiles")).'">'; - //print ''; + print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("MediaFiles")).'">'; + //print ''; /*print ''.dol_escape_htmltag($langs->trans("MediaFiles")).''; print ''; */ - print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; + print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; } print ''; @@ -2228,9 +2228,9 @@ if (! GETPOST('hide_websitemenu')) print '   '; - print ''; + print ''; - print ''; + print ''; print ''."\n"; print '
'; @@ -2284,7 +2284,7 @@ if (! GETPOST('hide_websitemenu')) if ($websitepage->grabbed_from) { - //print ''; + //print ''; print ''.img_picto($langs->trans("OnlyEditionOfSourceForGrabbedContent"), 'switch_off', '', false, 0, 0, '', 'nomarginleft').''; } else @@ -2325,17 +2325,17 @@ if (! GETPOST('hide_websitemenu')) if ($object->fk_default_home > 0 && $pageid == $object->fk_default_home) { //$disabled=' disabled="disabled"'; - //print ''; - print ''; + //print ''; + print ''; } else { //$disabled=''; - //print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'">'; - print ''; + //print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'">'; + print ''; } - print ''; - print ''; + print ''; + print ''; } } From 59625dceb5f205a281d303d86ad97c47624f0dd4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:03:30 +0200 Subject: [PATCH 529/798] Fix phpcs --- htdocs/core/lib/website.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index f4a42074789..28633c5fad9 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -113,7 +113,7 @@ function dolKeepOnlyPhpCode($str) * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html', $containerid='') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html', $containerid = '') { $nbrep = 0; @@ -201,7 +201,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context. */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From c131af5ae1b830dea1758b780c02bb5c62e007a1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:16:52 +0200 Subject: [PATCH 530/798] FIX #11672 --- htdocs/core/tpl/objectline_edit.tpl.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/tpl/objectline_edit.tpl.php b/htdocs/core/tpl/objectline_edit.tpl.php index ddb737bbdd6..bac9ff997bc 100644 --- a/htdocs/core/tpl/objectline_edit.tpl.php +++ b/htdocs/core/tpl/objectline_edit.tpl.php @@ -116,7 +116,6 @@ $coldisplay=0; $toolbarname='dolibarr_details'; if (! empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) $toolbarname='dolibarr_notes'; $doleditor=new DolEditor('product_desc', $line->description, '', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT)?164:$conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname, '', false, true, $enable, $nbrows, '98%'); - $doleditor=new DolEditor('product_desc', $line->description, '', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT)?164:$conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname, '', false, true, $enable, $nbrows, '98%'); $doleditor->Create(); } else { print ''; From b36df2303be281b4da982c37686f9ceb6e19b384 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:26:46 +0200 Subject: [PATCH 531/798] Update movement_list.php --- htdocs/product/stock/movement_list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index a64a8baa70e..f62b732cf7e 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -943,7 +943,7 @@ if ($resql) print_liste_field_titre($arrayfields['m.price']['label'], $_SERVER["PHP_SELF"], "m.price", "", $param, '', $sortfield, $sortorder, 'right '); } if (! empty($arrayfields['m.fk_projet']['checked'])) { - print_liste_field_titre($arrayfields['m.fk_projet']['label'],$_SERVER["PHP_SELF"], "m.fk_projet","",$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($arrayfields['m.fk_projet']['label'], $_SERVER["PHP_SELF"], "m.fk_projet", "", $param, 'align="right"', $sortfield, $sortorder); } // Extra fields From 4a083bb0389bb0c922370021f291cfe36130a7ce Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:35:05 +0200 Subject: [PATCH 532/798] Update chargesociales.class.php --- htdocs/compta/sociales/class/chargesociales.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index 05169adcf7b..4fd157de9e6 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -317,7 +317,7 @@ class ChargeSociales extends CommonObject $sql.= ", date_ech='".$this->db->idate($this->date_ech)."'"; $sql.= ", periode='".$this->db->idate($this->periode)."'"; $sql.= ", amount='".price2num($this->amount, 'MT')."'"; - $sql.= ", fk_projet='".($this->fk_project > 0 ? $this->db->escape($this->fk_project) : null)."'"; + $sql.= ", fk_projet=".($this->fk_project > 0 ? $this->fk_project : null); $sql.= ", fk_user_modif=".$user->id; $sql.= " WHERE rowid=".$this->id; From ac8bf7b06658a5ac71381611d5e36caf5f6e93cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:48:29 +0200 Subject: [PATCH 533/798] Update propal.class.php --- htdocs/comm/propal/class/propal.class.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 1bf1e5a6a69..a2d1e934d35 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1056,6 +1056,14 @@ class Propal extends CommonObject } } + // Add linked object (deprecated, use ->linkedObjectsIds instead) + if (! $error && $this->origin && $this->origin_id) + { + dol_syslog('Deprecated use of linked object, use ->linkedObjectsIds instead', LOG_WARNING); + $ret = $this->add_object_linked(); + if (! $ret) dol_print_error($this->db); + } + /* * Insertion du detail des produits dans la base * Insert products detail in database From f26a13ff137d2489896e0b68fcd4de5d2aff1a1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:50:18 +0200 Subject: [PATCH 534/798] NEW Removed deprecated code that create linked object from ->origin --- htdocs/comm/propal/class/propal.class.php | 8 -------- htdocs/fourn/class/fournisseur.facture.class.php | 11 ----------- .../class/supplier_proposal.class.php | 7 ------- 3 files changed, 26 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 598d34f7093..4767db0e5ad 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1056,14 +1056,6 @@ class Propal extends CommonObject } } - // Add linked object (deprecated, use ->linkedObjectsIds instead) - if (! $error && $this->origin && $this->origin_id) - { - dol_syslog('Deprecated use of linked object, use ->linkedObjectsIds instead', LOG_WARNING); - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } - /* * Insertion du detail des produits dans la base * Insert products detail in database diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 41ac2f126a7..755ea10303c 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -412,17 +412,6 @@ class FactureFournisseur extends CommonInvoice } } - // Add linked object (deprecated, use ->linkedObjectsIds instead) - if (! $error && $this->id && ! empty($this->origin) && ! empty($this->origin_id)) - { - $ret = $this->add_object_linked(); - if (! $ret) - { - dol_print_error($this->db); - $error++; - } - } - 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"); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 546a93763a6..a6b240a4532 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -986,13 +986,6 @@ class SupplierProposal extends CommonObject } } - // Add linked object (deprecated, use ->linkedObjectsIds instead) - if (! $error && $this->origin && $this->origin_id) - { - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } - /* * Insertion du detail des produits dans la base */ From 9f18b3d6904ed19604c2db2f322626595f705d9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:53:38 +0200 Subject: [PATCH 535/798] 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 69b43dbe514..458c6a2563b 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1913,7 +1913,7 @@ abstract class CommonObject * Change the multicurrency rate * * @param double $rate multicurrency rate - * @param int $mode mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency + * @param int $mode mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency will be recalculated * @return int >0 if OK, <0 if KO */ public function setMulticurrencyRate($rate, $mode = 1) From c0ac8daa61f976ed80d4097b4ca5e92845a8dd36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:18:12 +0200 Subject: [PATCH 536/798] Introduce the color theme "flashy" to use the high contrast color as an option because colors seems too agressive for sensible eyes. --- htdocs/core/lib/usergroups.lib.php | 1 + htdocs/theme/eldy/theme_vars.inc.php | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 81e9c8dea73..7c97c38dd4f 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -956,6 +956,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) $colorBlindOptions = array( 0 => $langs->trans('No'), + 'flashy' => $langs->trans('Flashy'), 'protanopia' => $langs->trans('Protanopia'), 'deuteranopes' => $langs->trans('Deuteranopes'), 'tritanopes' => $langs->trans('Tritanopes'), diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index f3fe44fbd04..6b8ac64a2ec 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,11 +32,18 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); -if(!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +$theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { - // for now we use the same configuration for all types of color blind - $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } } $theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4')); From 17f1962c345a8d680644c6b48e1da89b0a47a872 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:19:18 +0200 Subject: [PATCH 537/798] Support theme colors for theme MD --- htdocs/theme/md/theme_vars.inc.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 95ac3abdd34..b200746c330 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -29,6 +29,18 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); $theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +{ + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } +} $theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4')); $theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC')); From 56bc7b62ff0b4e5069ffc0bd22a26d9acaa20d96 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:25:08 +0200 Subject: [PATCH 538/798] Update products.lang --- htdocs/langs/en_US/products.lang | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index d9cf127b40d..73e672284de 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -341,4 +341,3 @@ ErrorDestinationProductNotFound=Destination product not found ErrorProductCombinationNotFound=Product variant not found ActionAvailableOnVariantProductOnly=Action only available on the variant of product ProductsPricePerCustomer=Product prices per customers -GlobalSearchOnExtrafield=Global search : apply on extrafields too (Warning : date format is YYYY-MM-DD) From 64e52789d643392f1ef9fb4f0e477bb9115dddae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:39:47 +0200 Subject: [PATCH 539/798] FIX #11591 FIX #11592 --- htdocs/contact/class/contact.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index f1ebeddd30e..bae8632e289 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1216,11 +1216,12 @@ class Contact extends CommonObject public function getCivilityLabel() { global $langs; - $langs->load("dict"); - $code=(! empty($this->civility_id)?$this->civility:(! empty($this->civilite)?$this->civilite:'')); + $code=($this->civility_code ? $this->civility_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); + + $langs->load("dict"); + return $langs->getLabelFromKey($this->db, "Civility".$code, "c_civility", "code", "label", $code); } /** From b0f0f655e9d2eea4f50cce60dbb80cd2653d01ac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:46:53 +0200 Subject: [PATCH 540/798] Update doc --- .github/CONTRIBUTING.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a13037402f8..19c076242f8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -115,12 +115,14 @@ Also, some code changes need a prior approbation: 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 the label of PR start with "WIP" (Work In Progress), it will not be analyzed (until you change the label of 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. 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. +In most cases, it gives 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 an action of the developer/author. -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. +Statistics on Dolibarr project shows that around 95% of submitted PR are reviewed and tagged. 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 4bed1b9a3d63391b1c12eae9f251ecc695566192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 22:21:31 +0200 Subject: [PATCH 541/798] Fix #11683 Correct links to create a new product or service from search results --- htdocs/product/list.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 460e9d5ee45..e7e8f1e4999 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -458,6 +458,10 @@ if ($resql) if($type == Product::TYPE_SERVICE) $rightskey='service'; if($user->rights->{$rightskey}->creer) { + if ($type === "") { + $newcardbutton.= dolGetButtonTitle($langs->trans('NewProduct'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type=0'); + $type = Product::TYPE_SERVICE; + } $label='NewProduct'; if($type == Product::TYPE_SERVICE) $label='NewService'; $newcardbutton.= dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type='.$type); From 6a2d37c5c83d1d286c8e57024c16e0015ef59439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 22:49:21 +0200 Subject: [PATCH 542/798] Fix code style / CI. --- htdocs/admin/pdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print '
'; // Place customer adress to the ISO location From 0045428c6c623649e998ca1d648d1a36766171c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 23:45:28 +0200 Subject: [PATCH 543/798] Fix link --- 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 28633c5fad9..2421ff19091 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -157,7 +157,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Replace relative link / with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) - $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\4"', $content, -1, $nbrep); + $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\3"', $content, -1, $nbrep); // Replace relative link /xxx.php?a=b&c=d#aaa or /xxx.php?a=b&c=d with dolibarr URL $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php\?([^#\"<>]*)(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2&\3\4"', $content, -1, $nbrep); From bf6f92edf8552cf1c23c2650507ef1abd1815cac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 23:54:33 +0200 Subject: [PATCH 544/798] Fix template --- htdocs/website/samples/page-sample-dynamiccontent.html | 2 +- htdocs/website/samples/page-sample-empty.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html index 41355f1b29b..c0e217dcc72 100644 --- a/htdocs/website/samples/page-sample-dynamiccontent.html +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -1,4 +1,4 @@ - +

__(MyContainerTitle)__ diff --git a/htdocs/website/samples/page-sample-empty.html b/htdocs/website/samples/page-sample-empty.html index 8caea620d80..d68e73870d9 100644 --- a/htdocs/website/samples/page-sample-empty.html +++ b/htdocs/website/samples/page-sample-empty.html @@ -1,3 +1,3 @@ - +
From 31c26edaf722df2ce70d0901853f033aa7915c85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 00:31:55 +0200 Subject: [PATCH 545/798] Fix link --- 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 2421ff19091..1ae45fee768 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -159,7 +159,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\3"', $content, -1, $nbrep); // Replace relative link /xxx.php?a=b&c=d#aaa or /xxx.php?a=b&c=d with dolibarr URL - $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php\?([^#\"<>]*)(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2&\3\4"', $content, -1, $nbrep); + $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php\?([^#\"<>]*)(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2&\3\4"', $content, -1, $nbrep); // Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/ $content = preg_replace('/url\((["\']?)medias\//', 'url(\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); From d70e6e4e9a32dedbf637eadacd2574161f104c36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 02:17:33 +0200 Subject: [PATCH 546/798] Fix record file with empty name --- htdocs/website/class/website.class.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 31b10401c8c..147955db4a5 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -1065,6 +1065,8 @@ class Website extends CommonObject { while (! feof($fp)) { + $reg = array(); + // Warning fgets with second parameter that is null or 0 hang. $buf = fgets($fp, 65000); if (preg_match('/^-- Page ID (\d+)\s[^\s]+\s(\d+).*Aliases\s(.*)\s--;/i', $buf, $reg)) @@ -1086,8 +1088,11 @@ class Website extends CommonObject // Regenerate alternative aliases pages foreach($aliasesarray as $aliasshortcuttocreate) { - $filealias=$conf->website->dir_output.'/'.$object->ref.'/'.$aliasshortcuttocreate.'.php'; - dolSavePageAlias($filealias, $object, $objectpagestatic); + if (trim($aliasshortcuttocreate)) + { + $filealias=$conf->website->dir_output.'/'.$object->ref.'/'.trim($aliasshortcuttocreate).'.php'; + dolSavePageAlias($filealias, $object, $objectpagestatic); + } } } } From 08038e5078fea8dfa8755c90b5ec65758f7b4e37 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 02:31:06 +0200 Subject: [PATCH 547/798] FIX save of empty files --- htdocs/core/lib/website2.lib.php | 2 +- htdocs/website/class/website.class.php | 11 +++++++---- htdocs/website/index.php | 7 +++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index cf6082f3bd8..357c050afd5 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -61,7 +61,7 @@ function dolSavePageAlias($filealias, $object, $objectpage) global $conf; // Now create the .tpl file (duplicate code with actions updatesource or updatecontent but we need this to save new header) - dol_syslog("We regenerate the alias page filealias=".$filealias); + dol_syslog("dolSavePageAlias We regenerate the alias page filealias=".$filealias); $aliascontent = 'website->dir_output.'/'.$object->ref.'/'.trim($aliasshortcuttocreate).'.php'; - dolSavePageAlias($filealias, $object, $objectpagestatic); + if (trim($aliasshortcuttocreate)) + { + $filealias=$conf->website->dir_output.'/'.$object->ref.'/'.trim($aliasshortcuttocreate).'.php'; + dolSavePageAlias($filealias, $object, $objectpagestatic); + } } } } diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 46121913c2b..273e74858ce 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1393,8 +1393,11 @@ if ($action == 'updatemeta') { foreach($tmpaltaliases as $tmpaliasalt) { - $result=dolSavePageAlias($pathofwebsite.'/'.trim($tmpaliasalt).'.php', $object, $objectpage); - if (! $result) setEventMessages('Failed to write file '.$pathofwebsite.'/'.trim($tmpaliasalt).'.php', null, 'errors'); + if (trim($tmpaliasalt)) + { + $result=dolSavePageAlias($pathofwebsite.'/'.trim($tmpaliasalt).'.php', $object, $objectpage); + if (! $result) setEventMessages('Failed to write file '.$pathofwebsite.'/'.trim($tmpaliasalt).'.php', null, 'errors'); + } } } } From 2510c1e5e46336fb649de246250e39c237e442a7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 03:05:55 +0200 Subject: [PATCH 548/798] Better help text --- htdocs/core/lib/website.lib.php | 5 +++-- htdocs/core/tpl/filemanager.tpl.php | 7 ++++--- htdocs/langs/en_US/main.lang | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 1ae45fee768..9805801b4b5 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -154,7 +154,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Protect the link styles.css.php to any replacement that we make after. $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); - // Replace relative link / with dolibarr URL + // Replace relative link '/' with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\3"', $content, -1, $nbrep); @@ -165,7 +165,8 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content = preg_replace('/url\((["\']?)medias\//', 'url(\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); $content = preg_replace('/data-slide-bg=(["\']?)medias\//', 'data-slide-bg=\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); - // ]*src=")(medias\/)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); // ]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT, '/').'\/viewimage))/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php index c0eff19fa84..a178f6400b8 100644 --- a/htdocs/core/tpl/filemanager.tpl.php +++ b/htdocs/core/tpl/filemanager.tpl.php @@ -163,11 +163,12 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg // Show the link to "Root" if ($showroot) { - print '
'; + print ''; } - - print ''; // Place customer adress to the ISO location From 9692ea5faf2ef69bec7328feda1a23092ce55143 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:41:53 +0200 Subject: [PATCH 563/798] FIX #11671 CVE-2019-15062 --- htdocs/core/actions_linkedfiles.inc.php | 8 +++----- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/user/card.php | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 72c78cb8a4d..54243494de4 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -125,8 +125,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $link = new Link($db); - $link->id = $linkid; - $link->fetch(); + $link->fetch($linkid); $res = $link->delete($user); $langs->load('link'); @@ -160,8 +159,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save', 'alpha') && GETPOST(' require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $langs->load('link'); $link = new Link($db); - $link->id = GETPOST('linkid', 'int'); - $f = $link->fetch(); + $f = $link->fetch(GETPOST('linkid', 'int')); if ($f) { $link->url = GETPOST('link', 'alpha'); @@ -169,7 +167,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save', 'alpha') && GETPOST(' { $link->url = 'http://' . $link->url; } - $link->label = GETPOST('label', 'alpha'); + $link->label = GETPOST('label', 'alphanohtml'); $res = $link->update($user); if (!$res) { diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 5f63d4db66c..d271f90720c 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1839,7 +1839,7 @@ class FormFile print $langs->trans('Link') . ': '; print ''; print ''; print ''; print ''; @@ -1853,7 +1853,7 @@ class FormFile print ''."\n"; print ''; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 36514aafd8e..13035d1fb0e 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -329,12 +329,12 @@ if (empty($reshook)) { { $error = 0; - if (!$_POST["lastname"]) { + if (! GETPOST("lastname", 'alpha')) { setEventMessages($langs->trans("NameNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; } - if (!$_POST["login"]) { + if (! GETPOST("login", 'alpha')) { setEventMessages($langs->trans("LoginNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; From b63c4b74b8e843614e17247554f6f614e53b65fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:56:28 +0200 Subject: [PATCH 564/798] Code comment --- htdocs/filefunc.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index b4aa814f2a5..85ede0efd39 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -149,6 +149,7 @@ if (empty($dolibarr_strict_mode)) $dolibarr_strict_mode=0; // For debug in php s // This test check if referrer ($_SERVER['HTTP_REFERER']) is same web site than Dolibarr ($_SERVER['HTTP_HOST']) // when we post forms (we allow GET to allow direct link to access a particular page). // Note about $_SERVER[HTTP_HOST/SERVER_NAME]: http://shiflett.org/blog/2006/mar/server-name-versus-http-host +// See also option $conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN for a stronger CSRF protection. if (! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck)) { if (! empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'GET' && ! empty($_SERVER['HTTP_HOST'])) From 6a5e6754819fefa94259c2bad0c9127f61acfe97 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:59:51 +0200 Subject: [PATCH 565/798] Add SECURITY.md file --- SECURITY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..63620cf4bf4 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,12 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| -------- | ------------------ | +| >= 9.0.* | :white_check_mark: | + +## Reporting a Vulnerability + +To report a vulnerability, please send an email to security@dolibarr.org +In most cases, after fixing the security, we make an answer by email to say the issue has been fixed. From 1e93d3d7902ecbb662dbc08f5a6b400fd8fc467f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:03:11 +0200 Subject: [PATCH 566/798] Prepare v10.0.2 --- 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 85ede0efd39..94455858e8b 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.1'); // 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.2'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO', chr(128)); From 48125fd957be6bf8526340b829e297c8d30a35d7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:32:58 +0200 Subject: [PATCH 567/798] Fix phpcs --- htdocs/admin/pdf.php | 2 +- htdocs/product/stock/card.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print ''; // Place customer adress to the ISO location diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 89d7258e3cc..a9d3e5979ce 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -74,7 +74,7 @@ if ($id > 0 || ! empty($ref)) { } // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('warehousecard','globalcard')); +$hookmanager->initHooks(array('warehousecard', 'globalcard')); /* * Actions From ee50c41e74d0259e71309eecafa9454eec2eebb8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:32:58 +0200 Subject: [PATCH 568/798] Fix phpcs --- htdocs/admin/pdf.php | 2 +- htdocs/product/stock/card.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print ''; // Place customer adress to the ISO location diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index ae2150e8464..1c78d6726d3 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -56,7 +56,7 @@ $backtopage=GETPOST('backtopage', 'alpha'); $result=restrictedArea($user, 'stock'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('warehousecard','globalcard')); +$hookmanager->initHooks(array('warehousecard', 'globalcard')); $object = new Entrepot($db); From d51a651ab4811051f6bcfd2317a0f02e3e1b4af3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:35:12 +0200 Subject: [PATCH 569/798] Fix phpcs --- 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 64d3b414cf8..58e13f37763 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1910,7 +1910,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE) !== true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; From 898996da4ab4a2109d17f411065e8b75f2f44156 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 21:45:13 +0200 Subject: [PATCH 570/798] =?UTF-8?q?FIX=20vulenrability=20in=20uploading=20?= =?UTF-8?q?file=20found=20by=20=E7=BE=8E=E5=88=9B=E7=A7=91=E6=8A=80?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=AE=9E=E9=AA=8C=E5=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/core/lib/files.lib.php | 7 ++++--- htdocs/core/lib/functions.lib.php | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 58e13f37763..1012b825254 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -985,6 +985,7 @@ function dolCheckVirus($src_file) * - This function can be used only into a HTML page context. Use dol_move if you are outside. * - Test on antivirus is always done (if antivirus set). * - Database of files is NOT updated (this is done by dol_add_file_process() that calls this function). + * - Extension .noexe may be added if file is executable and MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED is not set. * * @param string $src_file Source full path filename ($_FILES['field']['tmp_name']) * @param string $dest_file Target full path filename ($_FILES['field']['name']) @@ -1063,15 +1064,15 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable // Security: // We refuse cache files/dirs, upload using .. and pipes into filenames. - if (preg_match('/^\./', $src_file) || preg_match('/\.\./', $src_file) || preg_match('/[<>|]/', $src_file)) + if (preg_match('/^\./', basename($src_file)) || preg_match('/\.\./', $src_file) || preg_match('/[<>|]/', $src_file)) { dol_syslog("Refused to deliver file ".$src_file, LOG_WARNING); return -1; } // Security: - // On interdit fichiers caches, remontees de repertoire ainsi que les pipe dans les noms de fichiers. - if (preg_match('/^\./', $dest_file) || preg_match('/\.\./', $dest_file) || preg_match('/[<>|]/', $dest_file)) + // We refuse cache files/dirs, upload using .. and pipes into filenames. + if (preg_match('/^\./', basename($dest_file)) || preg_match('/\.\./', $dest_file) || preg_match('/[<>|]/', $dest_file)) { dol_syslog("Refused to deliver file ".$dest_file, LOG_WARNING); return -2; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e9f4301f8f2..24a87c15032 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -796,7 +796,8 @@ function dol_size($size, $type = '') */ function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1) { - $filesystem_forbidden_chars = array('<','>','/','\\','?','*','|','"','°'); + // List of special chars for filenames are defined on page https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file + $filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°'); return dol_string_nospecial($unaccent?dol_string_unaccent($str):$str, $newstr, $filesystem_forbidden_chars); } From 019cbc501dade8af4bcd3e0a12f52e690d9ba8ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 22:44:02 +0200 Subject: [PATCH 571/798] Report a better error message when db is offline. --- htdocs/master.inc.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index c09a04e8709..fcf68096e6b 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -121,6 +121,25 @@ if (! defined('NOREQUIREDB')) if ($db->error) { + // If we were into a website context + if (! defined('USEDOLIBARREDITOR') && ! defined('USEDOLIBARRSERVER') && ! empty($_SERVER['SCRIPT_FILENAME']) && (strpos($_SERVER['SCRIPT_FILENAME'], DOL_DATA_ROOT.'/website') === 0)) + { + $sapi_type = php_sapi_name(); + if (substr($sapi_type, 0, 3) != 'cgi') http_response_code(503); // To tel search engine this is a temporary error + print '
'; + if (is_object($langs)) + { + $langs->setDefaultLang('auto'); + $langs->load("website"); + print $langs->trans("SorryWebsiteIsCurrentlyOffLine"); + } + else + { + print "SorryWebsiteIsCurrentlyOffLine"; + } + print '
'; + exit; + } dol_print_error($db, "host=".$conf->db->host.", port=".$conf->db->port.", user=".$conf->db->user.", databasename=".$conf->db->name.", ".$db->error); exit; } From 4cea0433b7baa2edf41c3ca4c5bfa04b362105a5 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Fri, 16 Aug 2019 23:33:48 +0200 Subject: [PATCH 572/798] If user has not used change control, add total invoice payment --- htdocs/takepos/invoice.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index dfa058068ad..17805a6b060 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -175,6 +175,9 @@ if ($action == 'valid' && $user->rights->facture->creer) $payment->datepaye = $now; $payment->fk_account = $bankaccount; $payment->amounts[$invoice->id] = $amountofpayment; + + // If user has not used change control, add total invoice payment + if ($amountofpayment == 0) $payment->amounts[$invoice->id] = $invoice->total_ttc; $payment->paiementid=$paiementid; $payment->num_payment=$invoice->ref; From ae7ba9ff54a71e2eeffb58d7d52bc7c2f31a5d91 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 15:15:52 +0200 Subject: [PATCH 573/798] Doc --- htdocs/core/class/utils.class.php | 2 +- htdocs/core/modules/modSyslog.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index f86d6570e5c..be220c90487 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -802,7 +802,7 @@ class Utils dol_include_once('/core/lib/files.lib.php'); - $nbSaves = ! empty($conf->global->SYSLOG_FILE_SAVES) ? intval($conf->global->SYSLOG_FILE_SAVES) : 14; + $nbSaves = empty($conf->global->SYSLOG_FILE_SAVES) ? 10 : intval($conf->global->SYSLOG_FILE_SAVES); if (empty($conf->global->SYSLOG_FILE)) { $mainlogdir = DOL_DATA_ROOT; diff --git a/htdocs/core/modules/modSyslog.class.php b/htdocs/core/modules/modSyslog.class.php index b754eae2765..164d86522e6 100644 --- a/htdocs/core/modules/modSyslog.class.php +++ b/htdocs/core/modules/modSyslog.class.php @@ -92,7 +92,7 @@ class modSyslog extends DolibarrModules 'objectname' => 'Utils', 'method' => 'compressSyslogs', 'parameters' => '', - 'comment' => 'Compress and archive log files. Warning: batch must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission "rws" on this directory so log files will always have the group and permissions of the web server Operating System group', + 'comment' => 'Compress and archive log files. The number of versions to keep is defined into the setup of module. Warning: Main application cron script must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission "rws" on this directory so log files will always have the group and permissions of the web server Operating System group', 'frequency' => 1, 'unitfrequency' => 3600 * 24, 'priority' => 50, From 79f34074f761e4570b16a1a9acb4844d7f2b6ac3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 15:22:26 +0200 Subject: [PATCH 574/798] Fix link to delete job --- htdocs/cron/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 7273640e77e..ba868ed7b5d 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -1,7 +1,7 @@ - * Copyright (C) 2013-2016 Laurent Destailleur + * Copyright (C) 2013-2019 Laurent Destailleur * Copyright (C) 2019 Frédéric France * * This program is free software; you can redistribute it and/or modify @@ -553,7 +553,7 @@ if ($num > 0) } if ($user->rights->cron->delete) { - print "rowid."&action=delete".($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param; + print "rowid."&action=delete".($page?'&page='.$page:'').($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param; print "\" title=\"".dol_escape_htmltag($langs->trans('CronDelete'))."\">".img_picto($langs->trans('CronDelete'), 'delete')."  "; } else { print "trans('NotEnoughPermissions'))."\">".img_picto($langs->trans('NotEnoughPermissions'), 'delete')."   "; From b99b49c542efefab471b555891423c89f9fd6739 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 17:39:31 +0200 Subject: [PATCH 575/798] Enhance website module --- htdocs/langs/en_US/main.lang | 2 ++ htdocs/website/class/websitepage.class.php | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 1775ab266bb..528e3ff79aa 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -983,3 +983,5 @@ PaymentInformation=Payment information ValidFrom=Valid from ValidUntil=Valid until NoRecordedUsers=No users +NoArticlesFoundForTheKeyword=No article found for the keyword '%s' +NoArticlesFoundForTheCategory=No article found for the category \ No newline at end of file diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 417a1bfc305..23fd1842c89 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -340,7 +340,8 @@ class WebsitePage extends CommonObject return $records; } else { - $this->errors[] = 'Error ' . $this->db->lasterror(); + $this->error = 'Error ' . $this->db->lasterror(); + $this->errors[] = $this->error; dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); return -1; From ac1203fce3ec1ac713307b6e7b6e6cd3f30b925e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 18:42:43 +0200 Subject: [PATCH 576/798] Update template --- .../samples/page-sample-dynamiccontent.html | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html index c0e217dcc72..b2dd5acaea4 100644 --- a/htdocs/website/samples/page-sample-dynamiccontent.html +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -42,3 +42,57 @@ __(YouCanEditHtmlSource)__ Page created by __WEBSITE_CREATE_BY__
+ + + + +
+This is an example of a section to show the list of latest 5 articles (container with type "blogpost"), that contains the keyword "mykeyword"...
+ +

Latest Blog posts

+
+ loadLangs(array("main")); + $websitepage = new WebsitePage($db); + $fuser = new User($db); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'keywords'=>$keyword)); + if (is_numeric($arrayofblogs) && $arrayofblogs < 0) + { + print '
'.$weblangs->trans($websitepage->error).'
'; + } + elseif (is_array($arrayofblogs) && ! empty($arrayofblogs)) + { + foreach($arrayofblogs as $blog) + { + print ''; + } + } + else + { + print '
'; + print '
'; + print $weblangs->trans("NoArticlesFoundForTheKeyword", $keyword); + print '
'; + print '
'; + + } + ?> +
+
\ No newline at end of file From 2147d505c3745161904dcdbf864ab5c6547ad8fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 21:44:37 +0200 Subject: [PATCH 577/798] NEW Can restrict API usage to some IP only --- htdocs/api/admin/index.php | 29 ++++++++++++++++++++++++----- htdocs/api/index.php | 15 +++++++++++++++ htdocs/langs/en_US/admin.lang | 1 + 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index ed23151d99b..0ca6786b9b2 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -78,6 +78,12 @@ if ($action == 'setproductionmode') } } +if ($action == 'save') +{ + dolibarr_set_const($db, 'API_RESTICT_ON_IP', GETPOST('API_RESTICT_ON_IP', 'alpha')); +} + + dol_mkdir(DOL_DATA_ROOT.'/api/temp'); // May have been deleted by a purge @@ -93,37 +99,50 @@ print load_fiche_titre($langs->trans("ApiSetup"), $linkback, 'title_setup'); print $langs->trans("ApiDesc")."
\n"; print "
\n"; -//print ''; +print ''; print ''; +print ''; + print '
'; diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index 2c6580be662..c65c1fde57f 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -469,7 +469,7 @@ if ($object->id > 0) $num = $db->num_rows($query); - print '
'.$langs->trans("LastCustomersBills", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllBills").' '.$num.'
'; + print '
'; print ''; print ''."\n"; $nbworkboardempty=0; if (! empty($valid_dashboardlines)) { + $openedDashBoard = ''; + $boxwork.=''; + // README.md + print ''; + print '
'.$langs->trans("ProductsAndServices").''; print ''.$langs->trans("AllProductReferencesOfSupplier").' '.$object->nbOfProductRefs().''; @@ -541,7 +541,7 @@ if ($object->id > 0) if ($num > 0) { - print ''; + print '
'; print ''; print ''; - print ''; - print ''; - // Title - print ''; - print ''; + if (! empty($conf->global->THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION)) + { + // Firstname + print ''; + print ''; + print ''; + + // Title + print ''; + print ''; + } } // Alias names (commercial, trademark or alias names) From 5b1a89bf94e066570ea3ca7b6000d183468b5e2f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 30 Jul 2019 11:55:46 +0200 Subject: [PATCH 294/798] Fix php error with const --- htdocs/compta/cashcontrol/cashcontrol_card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 61acf6e3a89..378d6087cc7 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -247,7 +247,7 @@ if ($action=="create" || $action=="start") } // Get the bank account dedicated to this point of sale module/terminal - $vartouse=CASHDESK_ID_BANKACCOUNT_CASH.$terminaltouse; + $vartouse='CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse; $bankid = $conf->global->$vartouse; // This value is ok for 'Terminal 0' for module 'CashDesk' and 'TakePos' (they manage only 1 terminal) // Hook to get the good bank id according to posmodule and posnumber. // @TODO add hook here From a7a2e483c97e3682f4b8adb5cbd8013194793bd4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 16:01:26 +0200 Subject: [PATCH 295/798] 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 e48fe32e4f0..4f525330e79 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1683,7 +1683,7 @@ if ($socid && $action == 'create' && $user->rights->societe->creer) print ''; print ''; - print ''; + print ''; print ''; print ''; print "\n"; -print ''; -print ''; +print ''; @@ -134,23 +134,26 @@ $atleastonefound = 0; if (! empty($conf->banque->enabled)) { print ''; - print ''; print ''; - print ''; print ''; - print ''; foreach($paiements as $modep) { - if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; + if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; // Already managed before $name="CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse; print ''; - print ''; // Force warehouse (this is not a default value) - print ''; // Force warehouse (this is not a default value) - print '
'; @@ -644,7 +644,7 @@ if ($object->id > 0) if ($num > 0) { - print ''; + print '
'; print ''; print ''; $boxwork.='
'; @@ -717,7 +717,7 @@ if ($object->id > 0) $num = $db->num_rows($resql); if ($num > 0) { - print ''; + print '
'; print ''; print ''; @@ -1267,8 +1271,6 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if (! empty($rib->bic)) { if (! checkSwiftForAccount($rib)) { print ' '.img_picto($langs->trans("SwiftNotValid"), 'warning'); - } else { - print ' '.img_picto($langs->trans("SwiftValid"), 'info'); } } print ''; @@ -1279,6 +1281,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' //print ''; print ''; + print ''; + // FRSTRECUR print ''; } @@ -1531,6 +1535,9 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer) print ''; print ''; + print ''; + print ''; + print ''; print ''; + print ''; + print ''; + print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; + print ''; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totaldebitfield']=$totalarray['nbfield']; $totalarray['totaldebit'] += $line->debit; @@ -692,7 +692,7 @@ if ($num > 0) // Amount credit if (! empty($arrayfields['t.credit']['checked'])) { - print ''; + print ''; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalcreditfield']=$totalarray['nbfield']; $totalarray['totalcredit'] += $line->credit; @@ -754,8 +754,8 @@ if ($num > 0) if ($num < $limit && empty($offset)) print ''; else print ''; } - elseif ($totalarray['totaldebitfield'] == $i) print ''; - elseif ($totalarray['totalcreditfield'] == $i) print ''; + elseif ($totalarray['totaldebitfield'] == $i) print ''; + elseif ($totalarray['totalcreditfield'] == $i) print ''; else print ''; } print ''; From a63a6a58537fda283d8c8fa76733737fa0b7ad4a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 23:49:05 +0200 Subject: [PATCH 265/798] FIX Online payment --- htdocs/public/payment/newpayment.php | 44 ++++++++++++++++++++++++++-- htdocs/theme/eldy/global.inc.php | 3 ++ htdocs/theme/md/style.css.php | 3 ++ 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 5d04b6335c7..8c9eb93004f 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1687,26 +1687,51 @@ 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 '
'; + 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 '
'; + 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 '
'; + print '
'; if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'integral') { print '
'; @@ -1718,6 +1743,19 @@ if ($action != 'dopayment') //print '
'.$langs->trans("PaypalAccount").'">'; } print '
'; + print ' + '; } } } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 58b076a953c..a137b91236f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -147,6 +147,9 @@ input.buttonpayment, button.buttonpayment, div.buttonpayment { color: #fff; border-radius: 4px; } +div.buttonpayment input:focus { + color: #008; +} .buttonpaymentsmall { font-size: 0.65em; padding-left: 5px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9fad375eade..8999a73aaea 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -376,6 +376,9 @@ div.buttonpayment input { color: #333; cursor: pointer; } +div.buttonpayment input:focus { + color: #008; +} input.buttonpaymentcb { background-image: url(); background-size: 26px; From 9ca4d65965050e02a4afd746f06f2f323c656705 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:12:03 +0200 Subject: [PATCH 266/798] Fix stripe error management --- htdocs/public/payment/newpayment.php | 10 ++++++++-- htdocs/stripe/class/stripe.class.php | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 8c9eb93004f..02dc94285f6 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -430,7 +430,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) 'dol_version' => DOL_VERSION, 'dol_entity' => $conf->entity, 'dol_company' => $mysoc->name, // Usefull when using multicompany - 'dol_tax_num' => $taxinfo, + 'dol_tax_num' => $vatnumber, 'ipaddress'=> getUserRemoteIP() ); @@ -455,7 +455,13 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) include_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; $stripe = new Stripe($db); $stripeacc = $stripe->getStripeAccount($service); - $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1); + $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1); + if (empty($customer)) + { + $error++; + dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERROR, 0, '_stripe'); + setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); + } // Create Stripe card from Token if ($savesource) { diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 6b910236e96..c731637fce6 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -177,6 +177,7 @@ class Stripe extends CommonObject } catch(Exception $e) { + // For exemple, we may have error: 'No such customer: cus_XXXXX; a similar object exists in live mode, but a test mode key was used to make this request.' $this->error = $e->getMessage(); } } From 3112f2b1c564d549440cfbb63fb267237891b15f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:13:49 +0200 Subject: [PATCH 267/798] Fix error level --- htdocs/public/payment/newpayment.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 02dc94285f6..e43089f0a8d 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -459,7 +459,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) if (empty($customer)) { $error++; - dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERROR, 0, '_stripe'); + dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERR, 0, '_stripe'); setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); } From 406375bfc444829764b844477a73a810ffb9248a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:17:53 +0200 Subject: [PATCH 268/798] Fix error management --- htdocs/public/payment/newpayment.php | 76 +++++++++++++++------------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index e43089f0a8d..0a967cb10a7 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -461,47 +461,51 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) $error++; dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERR, 0, '_stripe'); setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); + $action=''; } // Create Stripe card from Token - if ($savesource) { - $card = $customer->sources->create(array("source" => $stripeToken, "metadata" => $metadata)); - } else { - $card = $stripeToken; - } - - if (empty($card)) + if (! $error) { - $error++; - dol_syslog('Failed to create card record', LOG_WARNING, 0, '_stripe'); - setEventMessages('Failed to create card record', null, 'errors'); - $action=''; - } - else - { - if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; - if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; - if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; + if ($savesource) { + $card = $customer->sources->create(array("source" => $stripeToken, "metadata" => $metadata)); + } else { + $card = $stripeToken; + } - dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_stripe'); - $charge = \Stripe\Charge::create(array( - 'amount' => price2num($amountstripe, 'MU'), - 'currency' => $currency, - 'capture' => true, // Charge immediatly - 'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, - 'metadata' => $metadata, - 'customer' => $customer->id, - 'source' => $card, - 'statement_descriptor' => dol_trunc($FULLTAG, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - ), array("idempotency_key" => "$FULLTAG", "stripe_account" => "$stripeacc")); - // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) - if (empty($charge)) - { - $error++; - dol_syslog('Failed to charge card', LOG_WARNING, 0, '_stripe'); - setEventMessages('Failed to charge card', null, 'errors'); - $action=''; - } + if (empty($card)) + { + $error++; + dol_syslog('Failed to create card record', LOG_WARNING, 0, '_stripe'); + setEventMessages('Failed to create card record', null, 'errors'); + $action=''; + } + else + { + if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; + if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; + if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; + + dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_stripe'); + $charge = \Stripe\Charge::create(array( + 'amount' => price2num($amountstripe, 'MU'), + 'currency' => $currency, + 'capture' => true, // Charge immediatly + 'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, + 'metadata' => $metadata, + 'customer' => $customer->id, + 'source' => $card, + 'statement_descriptor' => dol_trunc($FULLTAG, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) + ), array("idempotency_key" => "$FULLTAG", "stripe_account" => "$stripeacc")); + // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) + if (empty($charge)) + { + $error++; + dol_syslog('Failed to charge card', LOG_WARNING, 0, '_stripe'); + setEventMessages('Failed to charge card', null, 'errors'); + $action=''; + } + } } } else From 79bb9d951f5a47c786200006a89177ccfce9b950 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:36:05 +0200 Subject: [PATCH 269/798] Fix phpcs --- htdocs/expensereport/class/expensereport.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 4cc935f95a2..2d9795e6f59 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1181,7 +1181,6 @@ class ExpenseReport extends CommonObject } } } - } } From ecc0b4ed32a13646fcfb277dbd5c1ef0531889b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 02:16:21 +0200 Subject: [PATCH 270/798] Add prefixsession in event table --- htdocs/admin/tools/listevents.php | 76 ++++++++++++++++++++++++------ htdocs/core/class/events.class.php | 34 +++++++++++-- 2 files changed, 92 insertions(+), 18 deletions(-) diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php index 39ed6162f0f..bcb727f1fcb 100644 --- a/htdocs/admin/tools/listevents.php +++ b/htdocs/admin/tools/listevents.php @@ -56,11 +56,12 @@ $pagenext = $page + 1; if (! $sortfield) $sortfield="dateevent"; if (! $sortorder) $sortorder="DESC"; -$search_code = GETPOST("search_code"); -$search_ip = GETPOST("search_ip"); -$search_user = GETPOST("search_user"); -$search_desc = GETPOST("search_desc"); -$search_ua = GETPOST("search_ua"); +$search_code = GETPOST("search_code", "alpha"); +$search_ip = GETPOST("search_ip", "alpha"); +$search_user = GETPOST("search_user", "alpha"); +$search_desc = GETPOST("search_desc", "alpha"); +$search_ua = GETPOST("search_ua", "none"); +$search_prefix_session = GETPOST("search_prefix_session", "none"); if (GETPOST("date_startmonth") == '' || GETPOST("date_startmonth") > 0) $date_start=dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); else $date_start=-1; @@ -91,6 +92,8 @@ $date_endday = $tmp['mday']; $date_endmonth = $tmp['mon']; $date_endyear = $tmp['year']; +$arrayfields=array(); + /* * Actions @@ -108,6 +111,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_user=''; $search_desc=''; $search_ua=''; + $search_prefix_session=''; } // Purge audit events @@ -136,6 +140,7 @@ if ($action == 'confirm_purge' && $confirm == 'yes' && $user->admin) $securityevent->type='SECURITY_EVENTS_PURGE'; $securityevent->dateevent=$now; $securityevent->description=$text; + $result=$securityevent->create($user); if ($result > 0) { @@ -163,7 +168,7 @@ $userstatic=new User($db); $usefilter=0; $sql = "SELECT e.rowid, e.type, e.ip, e.user_agent, e.dateevent,"; -$sql.= " e.fk_user, e.description,"; +$sql.= " e.fk_user, e.description, e.prefix_session,"; $sql.= " u.login"; $sql.= " FROM ".MAIN_DB_PREFIX."events as e"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = e.fk_user"; @@ -175,6 +180,7 @@ if ($search_ip) { $usefilter++; $sql.=natural_search("e.ip", $search_ip, 0); } if ($search_user) { $usefilter++; $sql.=natural_search("u.login", $search_user, 0); } if ($search_desc) { $usefilter++; $sql.=natural_search("e.description", $search_desc, 0); } if ($search_ua) { $usefilter++; $sql.=natural_search("e.user_agent", $search_ua, 0); } +if ($search_prefix_session) { $usefilter++; $sql.=natural_search("e.prefix_session", $search_prefix_session, 0); } $sql.= $db->order($sortfield, $sortorder); // Count total nb of records @@ -207,6 +213,7 @@ if ($result) if ($search_user) $param.='&search_user='.urlencode($search_user); if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_ua) $param.='&search_ua='.urlencode($search_ua); + if ($search_prefix_sessiona) $param.='&search_prefix_session='.urlencode($search_prefix_session); if ($date_startmonth) $param.= "&date_startmonth=".urlencode($date_startmonth); if ($date_startday) $param.= "&date_startday=".urlencode($date_startday); if ($date_startyear) $param.= "&date_startyear=".urlencode($date_startyear); @@ -239,22 +246,36 @@ if ($result) print '
'; print ''; // IP print ''; print ''; print ''; + if (! empty($arrayfields['e.user_agent']['checked'])) + { + print ''; + } + + if (! empty($arrayfields['e.prefix_session']['checked'])) + { + print ''; + } + print ''; - print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "e.dateevent", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Code", $_SERVER["PHP_SELF"], "e.type", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("IP", $_SERVER["PHP_SELF"], "e.ip", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("User", $_SERVER["PHP_SELF"], "u.login", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "e.description", "", $param, 'align="left"', $sortfield, $sortorder); + print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "e.dateevent", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Code", $_SERVER["PHP_SELF"], "e.type", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("IP", $_SERVER["PHP_SELF"], "e.ip", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("User", $_SERVER["PHP_SELF"], "u.login", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "e.description", "", $param, '', $sortfield, $sortorder); + if (! empty($arrayfields['e.user_agent']['checked'])) + { + print_liste_field_titre("UserAgent", $_SERVER["PHP_SELF"], "e.user_agent", "", $param, '', $sortfield, $sortorder); + } + if (! empty($arrayfields['e.prefix_session']['checked'])) + { + print_liste_field_titre("PrefixSession", $_SERVER["PHP_SELF"], "e.prefix_session", "", $param, '', $sortfield, $sortorder); + } print_liste_field_titre(''); print "\n"; @@ -312,9 +341,26 @@ if ($result) print $text; print ''; + if (! empty($arrayfields['e.user_agent']['checked'])) + { + // User agent + print ''; + } + + if (! empty($arrayfields['e.prefix_session']['checked'])) + { + // User agent + print ''; + } + // More informations print ''; diff --git a/htdocs/core/class/events.class.php b/htdocs/core/class/events.class.php index af87e25fad1..57a076963fd 100644 --- a/htdocs/core/class/events.class.php +++ b/htdocs/core/class/events.class.php @@ -63,11 +63,20 @@ class Events // extends CommonObject public $dateevent; + public $ip; + + public $user_agent; + /** * @var string description */ public $description; + /** + * @var string Prefix session obtained with method dol_getprefix() + */ + public $prefix_session; + // List of all Audit/Security events supported by triggers public $eventstolog=array( array('id'=>'USER_LOGIN', 'test'=>1), @@ -108,6 +117,18 @@ class Events // extends CommonObject ); + // BEGIN MODULEBUILDER PROPERTIES + /** + * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + */ + public $fields=array( + 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>20), + 'prefix_session'=>array('type'=>'varchar(255)', 'label'=>'PrefixSession', 'enabled'=>1, 'visible'=>-1, 'notnull'=>-1, 'index'=>0, 'position'=>1000), + 'user_agent' =>array('type'=>'varchar(255)', 'label'=>'UserAgent', 'enabled'=>1, 'visible'=>-1, 'notnull'=> 1, 'default'=>0, 'index'=>1, 'position'=>1000), + ); + + /** * Constructor * @@ -144,7 +165,8 @@ class Events // extends CommonObject $sql.= "user_agent,"; $sql.= "dateevent,"; $sql.= "fk_user,"; - $sql.= "description"; + $sql.= "description,"; + $sql.= "prefix_session"; $sql.= ") VALUES ("; $sql.= " '".$this->db->escape($this->type)."',"; $sql.= " ".$conf->entity.","; @@ -152,7 +174,8 @@ class Events // extends CommonObject $sql.= " ".($this->user_agent ? "'".$this->db->escape(dol_trunc($this->user_agent, 250))."'" : 'NULL').","; $sql.= " '".$this->db->idate($this->dateevent)."',"; $sql.= " ".($user->id?"'".$this->db->escape($user->id)."'":'NULL').","; - $sql.= " '".$this->db->escape(dol_trunc($this->description, 250))."'"; + $sql.= " '".$this->db->escape(dol_trunc($this->description, 250))."',"; + $sql.= " '".$this->db->escape(dol_getprefix())."'"; $sql.= ")"; dol_syslog(get_class($this)."::create", LOG_DEBUG); @@ -222,7 +245,8 @@ class Events // extends CommonObject $sql.= " t.dateevent,"; $sql.= " t.description,"; $sql.= " t.ip,"; - $sql.= " t.user_agent"; + $sql.= " t.user_agent,"; + $sql.= " t.prefix_session"; $sql.= " FROM ".MAIN_DB_PREFIX."events as t"; $sql.= " WHERE t.rowid = ".$id; @@ -242,6 +266,7 @@ class Events // extends CommonObject $this->description = $obj->description; $this->ip = $obj->ip; $this->user_agent = $obj->user_agent; + $this->prefix_session = $obj->prefix_session; } $this->db->free($resql); @@ -293,5 +318,8 @@ class Events // extends CommonObject $this->type=''; $this->dateevent=time(); $this->description='This is a specimen event'; + $this->ip = '1.2.3.4'; + $this->user_agent = 'Mozilla specimen User Agent X.Y'; + $this->prefix_session = dol_getprefix(); } } From cd22cc70c8a307f4feda0cde338b7a799712fdb3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 06:41:51 +0200 Subject: [PATCH 271/798] FIX FEC Format - Save translation of the journal --- htdocs/accountancy/class/bookkeeping.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 21e43b524d7..67633e828a5 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -472,14 +472,15 @@ class BookKeeping extends CommonObject */ public function createStd(User $user, $notrigger = false, $mode='') { - global $conf; + global $conf, $langs; + + $langs->loadLangs(array("accountancy", "bills", "compta")); dol_syslog(__METHOD__, LOG_DEBUG); $error = 0; // Clean parameters - if (isset($this->doc_type)) { $this->doc_type = trim($this->doc_type); } @@ -546,7 +547,7 @@ class BookKeeping extends CommonObject $now = dol_now(); // Check parameters - // Put here code to add control on parameters values + $this->journal_label = $langs->trans($this->journal_label); // Insert request $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . $mode.' ('; From 7a9f2b43c508958104281304c6215446c93cc4f6 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 07:05:18 +0200 Subject: [PATCH 272/798] FIX Language key --- 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 f0d8df454cf..a86975b606f 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1161,7 +1161,7 @@ else } // Morphy $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; From cededd97d28b2ab22d72a8ef2ae84512a8bb2e96 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 08:52:08 +0200 Subject: [PATCH 273/798] FIX Language key --- htdocs/adherents/card.php | 2 +- htdocs/adherents/type.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 373e8b953f6..c6ec8569a09 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1181,7 +1181,7 @@ else } // Morphy $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 19790159c22..4251ba45ab9 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -342,7 +342,7 @@ if ($action == 'create') // Morphy $morphys[""] = $langs->trans("MorPhy"); $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; @@ -775,7 +775,7 @@ if ($rowid > 0) // Morphy $morphys[""] = $langs->trans("MorPhy"); $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; From 858e8a826f3a0a8ddab94061ffa574b029233148 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Fri, 26 Jul 2019 14:42:59 +0200 Subject: [PATCH 274/798] FIX: use rounding to compare the amounts --- ...e_20_modWorkflow_WorkflowManager.class.php | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php index e478e265652..5c13e372640 100644 --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php @@ -105,8 +105,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Propal::STATUS_SIGNED || $element->statut == Propal::STATUS_BILLED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked proposals = ".$totalonlinkedelements.", of order = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['propal'] as $element) { $ret=$element->classifyBilled($user); @@ -134,7 +134,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Commande::STATUS_VALIDATED || $element->statut == Commande::STATUS_SHIPMENTONPROCESS || $element->statut == Commande::STATUS_CLOSED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked orders = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) { foreach($object->linkedObjects['commande'] as $element) { @@ -157,8 +157,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Propal::STATUS_SIGNED || $element->statut == Propal::STATUS_BILLED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked proposals = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['propal'] as $element) { $ret=$element->classifyBilled($user); @@ -186,8 +186,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == CommandeFournisseur::STATUS_ACCEPTED || $element->statut == CommandeFournisseur::STATUS_ORDERSENT || $element->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY || $element->statut == CommandeFournisseur::STATUS_RECEIVED_COMPLETELY) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked orders = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['order_supplier'] as $element) { $ret=$element->classifyBilled($user); @@ -209,8 +209,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == SupplierProposal::STATUS_SIGNED || $element->statut == SupplierProposal::STATUS_BILLED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked supplier proposals = ".$totalonlinkedelements.", of supplier invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['supplier_proposal'] as $element) { $ret=$element->classifyBilled($user); @@ -237,7 +237,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Commande::STATUS_VALIDATED || $element->statut == Commande::STATUS_SHIPMENTONPROCESS || $element->statut == Commande::STATUS_CLOSED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked orders = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) { foreach($object->linkedObjects['commande'] as $element) { @@ -310,4 +310,26 @@ class InterfaceWorkflowManager extends DolibarrTriggers return 0; } + /** + * @param Object $conf Dolibarr settings object + * @param float $totalonlinkedelements Sum of total amounts (excl VAT) of + * invoices linked to $object + * @param float $object_total_ht The total amount (excl VAT) of the object + * (an order, a proposal, a bill, etc.) + * @return bool True if the amounts are equal (arithmetic errors within tolerance margin) + * True if the module is configured to skip the amount equality check + * False otherwise. + */ + private function shouldClassify($conf, $totalonlinkedelements, $object_total_ht) + { + // if the configuration allows unmatching amounts, allow classification anyway + if (!empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) { + return true; + } + // if the rounded amount difference is zero, allow classification, else deny + return 0 == round( + $totalonlinkedelements - $object_total_ht, + $conf->global->MAIN_MAX_DECIMALS_UNIT + ); + } } From 56f124844c353306307728f17eb3ba211a8710b9 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 10:04:28 +0200 Subject: [PATCH 275/798] Test in progress --- .../class/accountancyexport.class.php | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 1b477a57ae9..904388db64d 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -938,20 +938,14 @@ class AccountancyExport $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); - if ($line->doc_type == 'supplier_invoice') { - $type_enregistrement = 'F'; - } elseif ($line->doc_type == 'customer_invoice') { - $type_enregistrement = 'C'; - } else { - $type_enregistrement = 'E'; - } + $type_enregistrement = 'E'; // For write movement print $type_enregistrement . $separator; - print $line->code_journal . $separator; + print substr($line->code_journal, 0, 2) . $separator; print $line->id . $separator; print $line->piece_num . $separator; print $date_document . $separator; print $line->label_operation . $separator; - print $separator; + print $line->date_lim_reglement . $separator; if ($line->doc_type == 'supplier_invoice') { if ($line->montant < 0) { @@ -969,9 +963,18 @@ class AccountancyExport $nature_piece = ''; } print $nature_piece . $separator; + if (! empty($line->subledger_account)) { - print $line->numero_compte . $separator; + if ($line->doc_type == 'supplier_invoice') { + $racine_subledger_account = '40'; + } elseif ($line->doc_type == 'customer_invoice') { + $racine_subledger_account = '41'; + } else { + $nature_piece = ''; + } + print $racine_subledger_account . $separator; } + print price(abs($line->montant)) . $separator; print $line->sens . $separator; print length_accountg($line->numero_compte) . $separator; @@ -984,11 +987,11 @@ class AccountancyExport } if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { - print 'F' . $separator; + print 'F'; } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { - print 'C' . $separator; + print 'C'; } else { - print $separator; + print ''; } print $end_line; } From a5e3adc6f1453a3719fa0aeda7a8e01fe2ffb5cc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 10:51:17 +0200 Subject: [PATCH 276/798] Fix travis --- htdocs/bom/class/bom.class.php | 4 ++-- htdocs/comm/propal/class/propal.class.php | 4 ++-- htdocs/commande/class/commande.class.php | 4 ++-- htdocs/compta/facture/class/facture.class.php | 4 ++-- htdocs/contrat/class/contrat.class.php | 4 ++-- htdocs/expedition/class/expedition.class.php | 4 ++-- htdocs/expensereport/class/expensereport.class.php | 4 ++-- htdocs/fichinter/class/fichinter.class.php | 4 ++-- htdocs/fourn/class/fournisseur.commande.class.php | 4 ++-- htdocs/fourn/class/fournisseur.facture.class.php | 4 ++-- htdocs/livraison/class/livraison.class.php | 4 ++-- htdocs/reception/class/reception.class.php | 4 ++-- htdocs/supplier_proposal/class/supplier_proposal.class.php | 4 ++-- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index dd861d5dc47..40b4e89dfc5 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -584,8 +584,8 @@ class BOM extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'bom/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'bom/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 5de2c9b23f5..d957235d967 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1809,8 +1809,8 @@ class Propal extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'propale/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'propale/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index d0e0addbc94..15156688603 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -425,8 +425,8 @@ class Commande extends CommonOrder if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'commande/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 2a9a4f5686d..216282d369e 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2419,8 +2419,8 @@ class Facture extends CommonInvoice if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'facture/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'facture/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0b08d3723da..bfc18faf123 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -487,8 +487,8 @@ class Contrat extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'contract/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'contract/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 37f191a0ab0..3205a245285 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -814,8 +814,8 @@ class Expedition extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/sending/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/sending/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 2d9795e6f59..63b0b798a29 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1152,8 +1152,8 @@ class ExpenseReport extends CommonObject require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expensereport/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expensereport/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index ce066fc8c11..c987e6ffc58 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -577,8 +577,8 @@ class Fichinter extends CommonObject require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'ficheinter/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'ficheinter/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index b32e90c311d..c85bfaaf2d3 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -552,8 +552,8 @@ class CommandeFournisseur extends CommonOrder if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/commande/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index b13925bf29d..31780d33ed5 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1420,8 +1420,8 @@ class FactureFournisseur extends CommonInvoice if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index f24a2aee713..88cf4e1355a 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -442,8 +442,8 @@ class Livraison extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/receipt/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/receipt/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 84f95e40b9a..e89eb2c595b 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -644,8 +644,8 @@ class Reception extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'reception/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'reception/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 786485ad6dd..cb4f774a951 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1485,8 +1485,8 @@ class SupplierProposal extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'supplier_proposal/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'supplier_proposal/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } From f82571120675a2b22606d13f9f0077e1fbb506dd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 11:01:29 +0200 Subject: [PATCH 277/798] Code comment --- htdocs/core/modules/societe/modules_societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/societe/modules_societe.class.php b/htdocs/core/modules/societe/modules_societe.class.php index d185b4cfcf7..4a873847d8a 100644 --- a/htdocs/core/modules/societe/modules_societe.class.php +++ b/htdocs/core/modules/societe/modules_societe.class.php @@ -393,7 +393,7 @@ abstract class ModeleAccountancyCode * @param int $hidedesc Hide description * @param int $hideref Hide ref * @return int <0 if KO, >0 if OK - * @deprecated Use the new function generateDocument of Facture class + * @deprecated Use the new function generateDocument of Objects class * @see Societe::generateDocument() */ function thirdparty_doc_create(DoliDB $db, Societe $object, $message, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0) From 7931f0b422b6f193606079a6c3368d33ee18e916 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 11:06:39 +0200 Subject: [PATCH 278/798] Fix sql error --- htdocs/bom/class/bom.class.php | 2 +- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/commande/class/commande.class.php | 2 +- htdocs/compta/facture/class/facture.class.php | 2 +- htdocs/contrat/class/contrat.class.php | 2 +- htdocs/expedition/class/expedition.class.php | 2 +- htdocs/expensereport/class/expensereport.class.php | 2 +- htdocs/fichinter/class/fichinter.class.php | 2 +- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- htdocs/fourn/class/fournisseur.facture.class.php | 2 +- htdocs/livraison/class/livraison.class.php | 2 +- htdocs/reception/class/reception.class.php | 2 +- htdocs/supplier_proposal/class/supplier_proposal.class.php | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 40b4e89dfc5..7ad86b59ae8 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -585,7 +585,7 @@ class BOM extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'bom/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'bom/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index d957235d967..a9746ca6f65 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1810,7 +1810,7 @@ class Propal extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'propale/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'propale/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 15156688603..434d43e8ffa 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -426,7 +426,7 @@ class Commande extends CommonOrder { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'commande/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 216282d369e..a8b75341ed3 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2420,7 +2420,7 @@ class Facture extends CommonInvoice { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'facture/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'facture/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index bfc18faf123..147d31311d3 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -488,7 +488,7 @@ class Contrat extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'contract/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'contract/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 3205a245285..7fc4def441b 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -815,7 +815,7 @@ class Expedition extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/sending/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'expedition/sending/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 63b0b798a29..1160a6dcb94 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1153,7 +1153,7 @@ class ExpenseReport extends CommonObject // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expensereport/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'expensereport/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index c987e6ffc58..4ce2aa954b2 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -578,7 +578,7 @@ class Fichinter extends CommonObject // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'ficheinter/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'ficheinter/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index c85bfaaf2d3..d15545e4cda 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -553,7 +553,7 @@ class CommandeFournisseur extends CommonOrder { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'fournisseur/commande/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 31780d33ed5..9fe2f9bf6ed 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1421,7 +1421,7 @@ class FactureFournisseur extends CommonInvoice { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 88cf4e1355a..a8eee72df33 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -443,7 +443,7 @@ class Livraison extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/receipt/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'expedition/receipt/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index e89eb2c595b..3e2776675a1 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -645,7 +645,7 @@ class Reception extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'reception/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'reception/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index cb4f774a951..481d80cab57 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1486,7 +1486,7 @@ class SupplierProposal extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'supplier_proposal/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'supplier_proposal/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } From 87fc3c39689a35b872902e32aaba66850a81c663 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Mon, 29 Jul 2019 13:54:48 +0200 Subject: [PATCH 279/798] FIX: expedition card: infinite loop for printObjectLine hook if return > 0 --- htdocs/expedition/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index ae9ef67f755..326d378a199 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -1586,9 +1586,9 @@ if ($action == 'create') print $line->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var], 'colspan'=>$colspan),$indiceAsked); print ''; } - - $indiceAsked++; } + + $indiceAsked++; } print "
'; diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php index a69b98a9ac1..1d0897a72b0 100644 --- a/htdocs/margin/tabs/thirdpartyMargins.php +++ b/htdocs/margin/tabs/thirdpartyMargins.php @@ -18,7 +18,7 @@ /** * \file htdocs/margin/tabs/thirdpartyMargins.php * \ingroup product margins - * \brief Page des marges des factures clients pour un tiers + * \brief Page for invoice margins of a thirdparty */ require '../../main.inc.php'; @@ -170,7 +170,7 @@ if ($socid > 0) { $num = $db->num_rows($result); - print_barre_liste($langs->trans("MarginDetails"), $page, $_SERVER["PHP_SELF"], "&socid=".$object->id, $sortfield, $sortorder, '', 0, 0, ''); + print_barre_liste($langs->trans("MarginDetails"), $page, $_SERVER["PHP_SELF"], "&socid=".$object->id, $sortfield, $sortorder, '', $num, $num, ''); $i = 0; print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 7c2bbba5c42..58b076a953c 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2519,7 +2519,7 @@ table.liste tr:last-of-type td, table.noborder:not(#tablelines) tr:last-of-type border-bottom-color: rgb(); border-bottom-style: solid; } -div.tabBar div.fichehalfright table.noborder:not(.margintable):not(.paymenttable):last-of-type { +div.tabBar div.fichehalfright table.noborder:not(.margintable):not(.paymenttable):not(.lastrecordtable):last-of-type { border-bottom: 1px solid rgb(); } div.tabBar table.border>tbody>tr:last-of-type>td { diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 0f415ddbf33..f40d3afce33 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -450,8 +450,10 @@ if ($projectid) print '' . $langs->trans('TicketAssignedToMeInfos') . '

'; From 053ae8224b45b0940d0539e35a4b9be5bfacfab3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 27 Jul 2019 06:36:39 +0200 Subject: [PATCH 251/798] NEW Box use fiscal year (Thanks Yves57) --- .../boxes/box_graph_invoices_permonth.php | 23 +++++++++++++--- .../box_graph_invoices_supplier_permonth.php | 23 +++++++++++++--- .../core/boxes/box_graph_orders_permonth.php | 23 +++++++++++++--- .../box_graph_orders_supplier_permonth.php | 23 +++++++++++++--- .../boxes/box_graph_propales_permonth.php | 23 +++++++++++++--- htdocs/core/class/stats.class.php | 27 +++++++++++++------ 6 files changed, 114 insertions(+), 28 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index 5c747065138..ad2505374b8 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -74,6 +74,9 @@ class box_graph_invoices_permonth extends ModeleBoxes //include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; //$facturestatic=new Facture($db); + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxCustomersInvoicesPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -129,7 +132,7 @@ class box_graph_invoices_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicesnbinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$endyear.'.png'; @@ -146,7 +149,13 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -167,7 +176,7 @@ class box_graph_invoices_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicesamountinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$endyear.'.png'; @@ -184,7 +193,13 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index d06098daa3b..83779501df7 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -73,6 +73,9 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxSuppliersInvoicesPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -126,7 +129,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicessuppliernbinyear-".$year.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$year.'.png'; @@ -143,7 +146,13 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -164,7 +173,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicessupplieramountinyear-".$year.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$year.'.png'; @@ -181,7 +190,13 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index 8c4cb250376..8aa465782b6 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -74,6 +74,9 @@ class box_graph_orders_permonth extends ModeleBoxes //include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; //$commandestatic=new Commande($db); + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxCustomersOrdersPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -129,7 +132,7 @@ class box_graph_orders_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."ordersnbinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; @@ -144,7 +147,13 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -165,7 +174,7 @@ class box_graph_orders_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."ordersamountinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; @@ -180,7 +189,13 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index a584c7288ca..a5d5c9e6c0f 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -73,6 +73,9 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxSuppliersOrdersPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -128,7 +131,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."orderssuppliernbinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; @@ -143,7 +146,13 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -164,7 +173,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."orderssupplieramountinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; @@ -179,7 +188,13 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 861c5086704..763cdb855f9 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -74,6 +74,9 @@ class box_graph_propales_permonth extends ModeleBoxes //include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; //$propalstatic=new Propal($db); + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $langs->load("propal"); $text = $langs->trans("BoxProposalsPerMonth", $max); @@ -128,7 +131,7 @@ class box_graph_propales_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $datatype1 = array_pad(array(), ($endyear-$startyear+1), 'bars'); $filenamenb = $dir."/".$prefix."propalsnbinyear-".$endyear.".png"; @@ -144,7 +147,13 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -165,7 +174,7 @@ class box_graph_propales_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $datatype2 = array_pad(array(), ($endyear-$startyear+1), 'bars'); //$datatype2 = array('lines','bars'); @@ -183,7 +192,13 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index 08025161a0d..b41c1d8dfa6 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -39,10 +39,12 @@ abstract class Stats * @param int $endyear Start year * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) - * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month - * @return array Array of values + * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month + * @param int $startmonth month of the fiscal year start minus 1; 0=january + * @return array Array of values + */ - public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0) + public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) { global $conf,$user,$langs; @@ -86,6 +88,10 @@ abstract class Stats else { $year=$startyear; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) { + $startmonth = 0; + } + if ($startmonth != 0) $year = $year - 1; while ($year <= $endyear) { $datay[$year] = $this->getNbByMonth($year, $format); @@ -96,11 +102,11 @@ abstract class Stats for ($i = 0 ; $i < 12 ; $i++) { - $data[$i][]=$datay[$endyear][$i][0]; + $data[$i][]=$datay[$endyear][($i+$startmonth)%12][0]; $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year][$i][1]; + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; $year++; } } @@ -134,9 +140,10 @@ abstract class Stats * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month + * @param int $startmonth month of the fiscal year start minus 1; 0=january * @return array Array of values */ - public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0) + public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) { global $conf,$user,$langs; @@ -181,6 +188,10 @@ abstract class Stats else { $year=$startyear; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) { + $startmonth = 0; + } + if ($startmonth != 0) $year = $year - 1; while($year <= $endyear) { $datay[$year] = $this->getAmountByMonth($year, $format); @@ -191,11 +202,11 @@ abstract class Stats // $data = array('xval'=>array(0=>xlabel,1=>yval1,2=>yval2...),...) for ($i = 0 ; $i < 12 ; $i++) { - $data[$i][]=$datay[$endyear][$i][0]; // set label + $data[$i][]=$datay[$endyear][($i+$startmonth)%12][0]; // set label $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year][$i][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From 83e2f71e079641e2ad85ab9db454418490f7f12d Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 27 Jul 2019 07:56:33 +0200 Subject: [PATCH 252/798] Fix travis --- htdocs/core/boxes/box_graph_invoices_permonth.php | 6 ++++-- .../core/boxes/box_graph_invoices_supplier_permonth.php | 6 ++++-- htdocs/core/boxes/box_graph_orders_permonth.php | 6 ++++-- htdocs/core/boxes/box_graph_orders_supplier_permonth.php | 6 ++++-- htdocs/core/boxes/box_graph_propales_permonth.php | 6 ++++-- htdocs/core/class/stats.class.php | 8 ++++---- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index ad2505374b8..dc02d7421df 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -149,7 +149,8 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -193,7 +194,8 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index 83779501df7..12836031714 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -146,7 +146,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -190,7 +191,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index 8aa465782b6..b338d562132 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -147,7 +147,8 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -189,7 +190,8 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index a5d5c9e6c0f..e9ec246fef0 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -146,7 +146,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -188,7 +189,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 763cdb855f9..effe625b930 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -147,7 +147,8 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -192,7 +193,8 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index b41c1d8dfa6..2544441e16b 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -40,11 +40,11 @@ abstract class Stats * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month - * @param int $startmonth month of the fiscal year start minus 1; 0=january + * @param int $startmonth month of the fiscal year start min 1 max 12 ; if 0 = january * @return array Array of values */ - public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) + public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth = 0) { global $conf,$user,$langs; @@ -140,10 +140,10 @@ abstract class Stats * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month - * @param int $startmonth month of the fiscal year start minus 1; 0=january + * @param int $startmonth month of the fiscal year start min 1 max 12 ; if 0 = january * @return array Array of values */ - public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) + public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth = 0) { global $conf,$user,$langs; From 581ae226ffbfe914e0f68a64d277cb3fc61a21a6 Mon Sep 17 00:00:00 2001 From: ATM john Date: Sat, 27 Jul 2019 18:25:25 +0200 Subject: [PATCH 253/798] Fix sellist showOuputField --- htdocs/core/class/commonobject.class.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5bb557cac2c..9e66d391e0f 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5928,6 +5928,12 @@ abstract class CommonObject $type='link'; $param['options']=array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]); } + elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) { + $param['options'] = array($reg[1] . ':' . $reg[2] . ':' . $reg[3] . ':' . $reg[4] => 'N'); + $type = 'sellist'; + } + + $langfile=$val['langfile']; $list=$val['list']; $help=$val['help']; From 37ad5308e6f3483ec84898b0b888af284c3935ce Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 27 Jul 2019 19:19:13 +0200 Subject: [PATCH 254/798] Fix holiday counter auto update --- htdocs/holiday/class/holiday.class.php | 59 ++++++++++---------------- 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 03b2491ab59..b01d3d45984 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1132,45 +1132,30 @@ class Holiday extends CommonObject $result = $this->db->query($sql); $typeleaves=$this->getTypes(1,1); - foreach($typeleaves as $key => $val) - { - // On ajoute x jours à chaque utilisateurs - $nb_holiday = $val['newByMonth']; - if (empty($nb_holiday)) $nb_holiday=0; - if ($nb_holiday > 0) + // Update each user counter + foreach ($users as $userCounter) { + $nbDaysToAdd = $typeleaves[$userCounter['type']]['newByMonth']; + if(empty($nbDaysToAdd)) continue; + + dol_syslog("We update leave type id ".$userCounter['type']." for user id ".$userCounter['rowid'], LOG_DEBUG); + + $nowHoliday = $userCounter['nb_holiday']; + $newSolde = $nowHoliday + $nbDaysToAdd; + + // We add a log for each user + $this->addLogCP($user->id, $userCounter['rowid'], $langs->trans('HolidaysMonthlyUpdate'), $newSolde, $userCounter['type']); + + $result = $this->updateSoldeCP($userCounter['rowid'], $newSolde, $userCounter['type'], $langs->trans('HolidaysMonthlyUpdate')); + + if ($result < 0) { - dol_syslog("We update leavefor everybody for type ".$key, LOG_DEBUG); - - $i = 0; - while ($i < $nbUser) - { - $now_holiday = $this->getCPforUser($users[$i]['rowid'], $val['rowid']); - $new_solde = $now_holiday + $nb_holiday; - - // We add a log for each user - $this->addLogCP($user->id, $users[$i]['rowid'], $langs->trans('HolidaysMonthlyUpdate'), $new_solde, $val['rowid']); - - $i++; - } - - // Now we update counter for all users at once - $sql2 = "UPDATE ".MAIN_DB_PREFIX."holiday_users SET"; - $sql2.= " nb_holiday = nb_holiday + ".$nb_holiday; - $sql2.= " WHERE fk_type = ".$val['rowid']; - - $result= $this->db->query($sql2); - - if (! $result) - { - dol_print_error($this->db); - break; - } + $error++; + break; } - else dol_syslog("No change for leave of type ".$key, LOG_DEBUG); } - if ($result) + if (! $error) { $this->db->commit(); return 1; @@ -1522,7 +1507,7 @@ class Holiday extends CommonObject else { // List of vacation balance users - $sql = "SELECT cpu.fk_user, cpu.fk_type, cpu.nb_holiday, u.lastname, u.firstname, u.gender, u.photo, u.employee, u.statut, u.fk_user"; + $sql = "SELECT cpu.fk_user, cpu.fk_type, cpu.nb_holiday, u.lastname, u.firstname, u.gender, u.photo, u.employee, u.statut, u.fk_user as manager"; $sql.= " FROM ".MAIN_DB_PREFIX."holiday_users as cpu, ".MAIN_DB_PREFIX."user as u"; $sql.= " WHERE cpu.fk_user = u.rowid"; if ($filters) $sql.=$filters; @@ -1549,9 +1534,9 @@ class Holiday extends CommonObject $tab_result[$i]['status'] = $obj->statut; $tab_result[$i]['employee'] = $obj->employee; $tab_result[$i]['photo'] = $obj->photo; - $tab_result[$i]['fk_user'] = $obj->fk_user; + $tab_result[$i]['fk_user'] = $obj->manager; - $tab_result[$i]['type'] = $obj->type; + $tab_result[$i]['type'] = $obj->fk_type; $tab_result[$i]['nb_holiday'] = $obj->nb_holiday; $i++; From 43adb51932ac24ac3badac257855d7e8d8ad8e38 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 27 Jul 2019 22:06:08 +0200 Subject: [PATCH 255/798] Fix var declaration #11429 --- htdocs/expensereport/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index cc553f1e5de..21e716d7ac1 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -1904,7 +1904,7 @@ else if ($resql) { $num = $db->num_rows($resql); - $i = 0; $total = 0; + $i = 0; $totalpaid = 0; while ($i < $num) { $objp = $db->fetch_object($resql); From fd11dc782cdf68fe2f37541dc5df658004ed8368 Mon Sep 17 00:00:00 2001 From: Vaadasch Date: Sun, 28 Jul 2019 00:32:29 +0200 Subject: [PATCH 256/798] Change "DOCUMENT_URI" to "PHP_SELF" DOCUMENT_URI works with Apache. To be compliant with Nginx and probably some others, use PHP_SELF --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 0e6b0befef9..9840f01e3cd 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1411,7 +1411,7 @@ class ExtraFields // current object id can be use into filter if (strpos($InfoFieldList[4], '$ID$') !== false && !empty($objectid)) { $InfoFieldList[4] = str_replace('$ID$', $objectid, $InfoFieldList[4]); - } elseif (preg_match("#^.*list.php$#", $_SERVER["DOCUMENT_URI"])) { + } elseif (preg_match("#^.*list.php$#", $_SERVER["PHP_SELF"])) { // Pattern for word=$ID$ $word = '\b[a-zA-Z0-9-\.-_]+\b=\$ID\$'; From 3e69421ec3abdc9f650873c25cfb3a3088df12b7 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 28 Jul 2019 07:33:57 +0200 Subject: [PATCH 257/798] Fix travis --- htdocs/core/boxes/box_graph_invoices_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_invoices_supplier_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_orders_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_orders_supplier_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_propales_permonth.php | 2 +- htdocs/core/class/stats.class.php | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index dc02d7421df..d33600c0fc8 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -151,7 +151,7 @@ class box_graph_invoices_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -196,7 +196,7 @@ class box_graph_invoices_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index 12836031714..d01d5b6252f 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -148,7 +148,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -193,7 +193,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index b338d562132..f9be1c79cea 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -149,7 +149,7 @@ class box_graph_orders_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -192,7 +192,7 @@ class box_graph_orders_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index e9ec246fef0..1f907fc01be 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -148,7 +148,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -191,7 +191,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index effe625b930..7179f255add 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -149,7 +149,7 @@ class box_graph_propales_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index 2544441e16b..f873b0f5deb 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -106,7 +106,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; $year++; } } @@ -206,7 +206,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From be6ad7b6a450f0a032655d84117835f2216060a9 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 28 Jul 2019 17:10:37 +0200 Subject: [PATCH 258/798] New : can define RUM date on third bank account --- htdocs/langs/en_US/withdrawals.lang | 3 ++- .../societe/class/companybankaccount.class.php | 5 +++-- htdocs/societe/paymentmodes.php | 18 ++++++++++++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang index cbca2b2f103..88e5eaf128c 100644 --- a/htdocs/langs/en_US/withdrawals.lang +++ b/htdocs/langs/en_US/withdrawals.lang @@ -76,7 +76,8 @@ WithdrawalFile=Withdrawal file SetToStatusSent=Set to status "File Sent" ThisWillAlsoAddPaymentOnInvoice=This will also record payments to invoices and will classify them as "Paid" if remain to pay is null StatisticsByLineStatus=Statistics by status of lines -RUM=UMR +RUM=Unique Mandate Reference (UMR) +DateRUM=Mandate signature date RUMLong=Unique Mandate Reference RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. WithdrawMode=Direct debit mode (FRST or RECUR) diff --git a/htdocs/societe/class/companybankaccount.class.php b/htdocs/societe/class/companybankaccount.class.php index 0c4da8aa103..6f957be32d7 100644 --- a/htdocs/societe/class/companybankaccount.class.php +++ b/htdocs/societe/class/companybankaccount.class.php @@ -46,7 +46,7 @@ class CompanyBankAccount extends Account * @var integer */ public $datec; - + /** * Date modification record (tms) * @@ -217,7 +217,7 @@ class CompanyBankAccount extends Account if (empty($id) && empty($socid)) return -1; $sql = "SELECT rowid, type, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation, proprio,"; - $sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur"; + $sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur, date_rum"; $sql.= " FROM ".MAIN_DB_PREFIX."societe_rib"; if ($id) $sql.= " WHERE rowid = ".$id; if ($socid) @@ -255,6 +255,7 @@ class CompanyBankAccount extends Account $this->datem = $this->db->jdate($obj->datem); $this->rum = $obj->rum; $this->frstrecur = $obj->frstrecur; + $this->date_rum = $this->db->jdate($obj->date_rum); } $this->db->free($resql); diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 497afe9c210..8ec3cdc5ca6 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -157,9 +157,13 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur', 'alpha'); $companybankaccount->rum = GETPOST('rum', 'alpha'); + $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); if (empty($companybankaccount->rum)) { $companybankaccount->rum = $prelevement->buildRumNumber($object->code_client, $companybankaccount->datec, $companybankaccount->id); + } + if (empty($companybankaccount->date_rum)) + { $companybankaccount->date_rum = dol_now(); } @@ -268,6 +272,7 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur'); $companybankaccount->rum = GETPOST('rum', 'alpha'); + $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); $companybankaccount->datec = dol_now(); $companybankaccount->status = 1; @@ -1208,6 +1213,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if (! empty($conf->prelevement->enabled)) { print_liste_field_titre("RUM"); + print_liste_field_titre("DateRUM"); print_liste_field_titre("WithdrawMode"); } print_liste_field_titre("DefaultRIB", '', '', '', '', '', '', '', 'center '); @@ -1257,8 +1263,6 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if (! empty($rib->iban)) { if (! checkIbanForAccount($rib)) { print ' '.img_picto($langs->trans("IbanNotValid"), 'warning'); - } else { - print ' '.img_picto($langs->trans("IbanValid"), 'info'); } } print '
'.$prelevement->buildRumNumber($object->code_client, $rib->datec, $rib->id).''.$rib->rum.''.dol_print_date($rib->date_rum, 'day').''.$rib->frstrecur.'
'.$langs->trans("RUM").'
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum')?GETPOST('date_rum'):$companybankaccount->date_rum, 'date_rum', 0,0,1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); print $form->selectarray("frstrecur", $tblArraychoice, dol_escape_htmltag(GETPOST('frstrecur', 'alpha')?GETPOST('frstrecur', 'alpha'):$companybankaccount->frstrecur), 0); @@ -1675,6 +1682,9 @@ if ($socid && $action == 'create' && $user->rights->societe->creer) print '
'.$langs->trans("RUM").'
'.$langs->trans("RUMWillBeGenerated").'
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum'), 'date_rum', 0,0,1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); print $form->selectarray("frstrecur", $tblArraychoice, (isset($_POST['frstrecur'])?GETPOST('frstrecur'):'FRST'), 0); From 02d6c1a334625fb5e100a286537469a3aabcc631 Mon Sep 17 00:00:00 2001 From: Vaadasch Date: Sun, 28 Jul 2019 17:51:15 +0200 Subject: [PATCH 259/798] Change 0 and 1 to FALSE and TRUE for pgsql 0 and 1 are read as False and True by Mysql, but not by PGsql. FALSE and TRUE are correctly read by both => changing --- htdocs/core/class/extrafields.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 0e6b0befef9..a74783a7838 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1445,13 +1445,13 @@ class ExtraFields $InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]); } else { if (!empty($matchCondition[1])) { - $boolCond = (($matchCondition[1] == "AND") ? ' AND 1 ' : ' OR 0 '); + $boolCond = (($matchCondition[1] == "AND") ? ' AND TRUE ' : ' OR FALSE '); $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond . $matchCondition[3], $InfoFieldList[4]); } elseif (!empty($matchCondition[3])) { - $boolCond = (($matchCondition[3] == "AND") ? ' 1 AND ' : ' 0 OR'); + $boolCond = (($matchCondition[3] == "AND") ? ' TRUE AND ' : ' FALSE OR'); $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond, $InfoFieldList[4]); } else { - $InfoFieldList[4] = 1; + $InfoFieldList[4] = " TRUE "; } } From 1f3e5096035c181f15529db684da4ed9351a7843 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 21:24:42 +0200 Subject: [PATCH 260/798] Show message when a redirect is done. --- htdocs/core/lib/website.lib.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index a4c187f2ffa..00716f6a3ab 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -339,6 +339,14 @@ function redirectToContainer($containerref, $containeraliasalt = '', $containeri } } + if (defined('USEDOLIBARREDITOR')) + { + print '
'; + print "This page contains dynamic code that make a redirect to '".$containerref."' in your current context. There is no preview for this page."; + print '
'; + exit; + } + if (defined('USEDOLIBARRSERVER')) // When page called from Dolibarr server { // Check new container exists From 3cc2c91e31c0b0687d0e64073a691d59bd74cd47 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 28 Jul 2019 19:07:44 +0200 Subject: [PATCH 261/798] Use date_rum if defined --- htdocs/compta/prelevement/class/bonprelevement.class.php | 5 +++-- htdocs/societe/paymentmodes.php | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 1a98c33ab02..a60330270d4 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1417,7 +1417,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.ref 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.= " f.ref as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum, rib.date_rum"; $sql.= " FROM"; $sql.= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql.= " ".MAIN_DB_PREFIX."facture as f,"; @@ -1443,7 +1443,8 @@ 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, $obj->rum); + $daterum = (!empty($obj->date_rum)) ? $this->db->jdate($obj->date_rum) : $this->db->jdate($obj->datec); + $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, $daterum, $obj->drum, $obj->rum); $this->total = $this->total + $obj->somme; $i++; } diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 8ec3cdc5ca6..e48fe32e4f0 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -157,7 +157,7 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur', 'alpha'); $companybankaccount->rum = GETPOST('rum', 'alpha'); - $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); + $companybankaccount->date_rum = dol_mktime(0, 0, 0, GETPOST('date_rummonth'), GETPOST('date_rumday'), GETPOST('date_rumyear')); if (empty($companybankaccount->rum)) { $companybankaccount->rum = $prelevement->buildRumNumber($object->code_client, $companybankaccount->datec, $companybankaccount->id); @@ -272,7 +272,7 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur'); $companybankaccount->rum = GETPOST('rum', 'alpha'); - $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); + $companybankaccount->date_rum = dol_mktime(0, 0, 0, GETPOST('date_rummonth'), GETPOST('date_rumday'), GETPOST('date_rumyear')); $companybankaccount->datec = dol_now(); $companybankaccount->status = 1; @@ -1536,7 +1536,7 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer) print '
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum')?GETPOST('date_rum'):$companybankaccount->date_rum, 'date_rum', 0,0,1, 'date_rum').'
'.$form->selectDate(GETPOST('date_rum')?GETPOST('date_rum'):$companybankaccount->date_rum, 'date_rum', 0, 0, 1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); From 9a7113f4f5295b610e853beb3549257aad0413e3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 22:26:55 +0200 Subject: [PATCH 262/798] FIX Update the file index table when we validate/rename a ref. --- htdocs/bom/class/bom.class.php | 14 ++++++++++---- htdocs/comm/propal/class/propal.class.php | 16 ++++++++++------ htdocs/commande/class/commande.class.php | 12 +++++++++--- htdocs/compta/facture/class/facture.class.php | 11 ++++++++--- htdocs/contrat/class/contrat.class.php | 11 ++++++++--- htdocs/expedition/class/expedition.class.php | 11 ++++++++--- .../expensereport/class/expensereport.class.php | 12 +++++++++--- htdocs/fichinter/class/fichinter.class.php | 13 ++++++++++--- .../fourn/class/fournisseur.commande.class.php | 11 ++++++++--- htdocs/fourn/class/fournisseur.facture.class.php | 13 +++++++++---- htdocs/livraison/class/livraison.class.php | 11 ++++++++--- htdocs/reception/class/reception.class.php | 11 ++++++++--- .../class/supplier_proposal.class.php | 16 ++++++++++------ 13 files changed, 115 insertions(+), 47 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 10601303a61..dd861d5dc47 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -515,6 +515,7 @@ class BOM extends CommonObject public function valid($user, $notrigger = 0) { global $conf, $langs; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $error=0; @@ -582,13 +583,18 @@ class BOM extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments - $oldref = dol_sanitizeFileName($this->ref); + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'bom/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments + $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->bom->dir_output.'/'.$oldref; $dirdest = $conf->bom->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 0d3eacc56a4..5de2c9b23f5 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1739,10 +1739,10 @@ class Propal extends CommonObject */ public function valid($user, $notrigger = 0) { - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - global $conf; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $error=0; // Protection @@ -1808,14 +1808,18 @@ class Propal extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of propal directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'propale/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->propal->multidir_output[$this->entity].'/'.$oldref; $dirdest = $conf->propal->multidir_output[$this->entity].'/'.$newref; - - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index fd7832f868f..d0e0addbc94 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -321,6 +321,7 @@ class Commande extends CommonOrder public function valid($user, $idwarehouse = 0, $notrigger = 0) { global $conf,$langs; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $error=0; @@ -423,13 +424,18 @@ class Commande extends CommonOrder // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'commande/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->commande->dir_output.'/'.$oldref; $dirdest = $conf->commande->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index e5041217cb3..2a9a4f5686d 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2418,13 +2418,18 @@ class Facture extends CommonInvoice // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of object directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'facture/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->facture->dir_output.'/'.$oldref; $dirdest = $conf->facture->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 6396b5e5f88..0b08d3723da 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -486,13 +486,18 @@ class Contrat extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of object directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'contract/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->contract->dir_output.'/'.$oldref; $dirdest = $conf->contract->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index d79b6976630..37f191a0ab0 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -813,13 +813,18 @@ class Expedition extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/sending/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($numref); $dirsource = $conf->expedition->dir_output.'/sending/'.$oldref; $dirdest = $conf->expedition->dir_output.'/sending/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 3bdd026e62f..4cc935f95a2 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1151,13 +1151,18 @@ class ExpenseReport extends CommonObject { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expensereport/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->expensereport->dir_output.'/'.$oldref; $dirdest = $conf->expensereport->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); @@ -1176,6 +1181,7 @@ class ExpenseReport extends CommonObject } } } + } } diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 807b547a4bc..ce066fc8c11 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -574,13 +574,20 @@ class Fichinter extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of object directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'ficheinter/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->ficheinter->dir_output.'/'.$oldref; $dirdest = $conf->ficheinter->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::setValid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 1dddd3e7319..b32e90c311d 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -551,13 +551,18 @@ class CommandeFournisseur extends CommonOrder // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // We rename directory ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/commande/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->fournisseur->commande->dir_output.'/'.$oldref; $dirdest = $conf->fournisseur->commande->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 15169e79f6d..b13925bf29d 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1322,6 +1322,7 @@ class FactureFournisseur extends CommonInvoice public function validate($user, $force_number = '', $idwarehouse = 0, $notrigger = 0) { global $conf,$langs; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $now=dol_now(); @@ -1418,14 +1419,18 @@ class FactureFournisseur extends CommonInvoice // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire facture ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); - $dirsource = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$oldref; $dirdest = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 9a84274d0c5..f24a2aee713 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -441,13 +441,18 @@ class Livraison extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) - // afin de ne pas perdre les fichiers attaches + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/receipt/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($numref); $dirsource = $conf->expedition->dir_output.'/receipt/'.$oldref; $dirdest = $conf->expedition->dir_output.'/receipt/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 811c2b8586f..84f95e40b9a 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -643,13 +643,18 @@ class Reception extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'reception/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($numref); $dirsource = $conf->reception->dir_output.'/'.$oldref; $dirdest = $conf->reception->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index ca16348dcd6..786485ad6dd 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1484,16 +1484,20 @@ class SupplierProposal extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of propal directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files - $oldref = dol_sanitizeFileName($this->ref); + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'supplier_proposal/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments + $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->supplier_proposal->dir_output.'/'.$oldref; $dirdest = $conf->supplier_proposal->dir_output.'/'.$newref; - - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { - dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); + dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) { dol_syslog("Rename ok"); From 4e26eefe6e2c909c3a00a7de8f779e2fb9f8399d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 22:57:07 +0200 Subject: [PATCH 263/798] Fix field not mandatory --- htdocs/stripe/admin/stripe.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 3966a3f439f..770678aae15 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -194,7 +194,7 @@ if (empty($conf->stripeconnect->enabled)) print '
'; - print ''.$langs->trans("STRIPE_TEST_WEBHOOK_KEY").''; + print ''.$langs->trans("STRIPE_TEST_WEBHOOK_KEY").''; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
'; @@ -267,7 +267,7 @@ if (empty($conf->stripeconnect->enabled)) print '
'; - print ''.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").''; + print ''.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").''; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
'; From a2fc3689dace61795fd3761bb0f444fb34f5e92c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 28 Jul 2019 22:59:43 +0200 Subject: [PATCH 264/798] Nowrap on amount --- htdocs/accountancy/bookkeeping/card.php | 6 +++--- htdocs/accountancy/bookkeeping/list.php | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index ad7a30603dc..6de7bbfe50e 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -641,8 +641,8 @@ if ($action == 'create') print '
' . $accountingaccount->getNomUrl(0,1,1,'',0) . '' . length_accounta($line->subledger_account) . '' . $line->label_operation. '' . price($line->debit) . '' . price($line->credit) . '' . price($line->debit) . '' . price($line->credit) . ''; print 'id . '&piece_num=' . $line->piece_num . '&mode='.$mode.'">'; @@ -675,7 +675,7 @@ if ($action == 'create') print $formaccounting->select_account($accountingaccount_number, '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 + // 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)) { diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index c8df00f6cdc..9fb1746ceac 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -683,7 +683,7 @@ if ($num > 0) // Amount debit if (! empty($arrayfields['t.debit']['checked'])) { - print '' . ($line->debit ? price($line->debit) : ''). '' . ($line->debit ? price($line->debit) : ''). '' . ($line->credit ? price($line->credit) : '') . '' . ($line->credit ? price($line->credit) : '') . ''.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price($totalarray['totaldebit']).''.price($totalarray['totalcredit']).''.price($totalarray['totaldebit']).''.price($totalarray['totalcredit']).'
'.$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0).''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - //print ''; + //print ''; print ''; + print ''; + print ''; + print ''; + print ''; $searchpicto=$form->showFilterAndCheckAddButtons(0); print $searchpicto; @@ -264,11 +285,19 @@ if ($result) print '
'; + print $obj->user_agent; + print ''; + print $obj->prefix_session; + print ''; $htmltext=''.$langs->trans("UserAgent").': '.($obj->user_agent?$obj->user_agent:$langs->trans("Unknown")); + $htmltext.='
'.$langs->trans("PrefixSession").': '.($obj->prefix_session?$obj->prefix_session:$langs->trans("Unknown")); print $form->textwithpicto('', $htmltext); print '
'.$langs->trans("Nature").''; print $form->selectarray("morphy", $morphys, (GETPOSTISSET("morphy")?GETPOST("morphy",'alpha'):$object->morphy)); print "
'.$langs->trans("MemberNature").''; print $form->selectarray("morphy", $morphys, (GETPOSTISSET("morphy")?GETPOST("morphy", 'alpha'):$object->morphy)); print "
'.$langs->trans("MemberNature").''; print $form->selectarray("morphy", $morphys, isset($_POST["morphy"])?$_POST["morphy"]:$object->morphy); print "
'.$langs->trans("MemberNature").''; print $form->selectarray("morphy", $morphys, isset($_POST["morphy"])?$_POST["morphy"]:$object->morphy); print "
"; From 96380f01c6170a853602eb7f6ffab777d788073e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 15:41:53 +0200 Subject: [PATCH 280/798] Test in progress --- .../class/accountancyexport.class.php | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 904388db64d..10ebabc4f8a 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -938,15 +938,22 @@ class AccountancyExport $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); + // TYPE $type_enregistrement = 'E'; // For write movement print $type_enregistrement . $separator; + // JNAL print substr($line->code_journal, 0, 2) . $separator; + // NECR print $line->id . $separator; + // NPIE print $line->piece_num . $separator; + // DATP print $date_document . $separator; + // LIBE print $line->label_operation . $separator; + // DATH print $line->date_lim_reglement . $separator; - + // CNPI if ($line->doc_type == 'supplier_invoice') { if ($line->montant < 0) { $nature_piece = 'AF'; @@ -963,7 +970,8 @@ class AccountancyExport $nature_piece = ''; } print $nature_piece . $separator; - + // RACI + /* if (! empty($line->subledger_account)) { if ($line->doc_type == 'supplier_invoice') { $racine_subledger_account = '40'; @@ -973,19 +981,27 @@ class AccountancyExport $nature_piece = ''; } print $racine_subledger_account . $separator; + } else { + print $separator; } - + */ + // MONT print price(abs($line->montant)) . $separator; + // CODC print $line->sens . $separator; + // CPTG print length_accountg($line->numero_compte) . $separator; + // DATE print $date_creation . $separator; + // CLET print $line->lettering_code . $separator; + // DATL print $line->date_lettering . $separator; - + // CPTA if (! empty($line->subledger_account)) { print length_accounta($line->subledger_account) . $separator; } - + // CNAT if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { print 'F'; } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { From 9e92b73d4aaa514c3395629047fe7c1c5469eca0 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 29 Jul 2019 17:12:41 +0200 Subject: [PATCH 281/798] Move open dashboard --- htdocs/index.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index d6ce8c90067..bce4c521ad5 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -100,7 +100,7 @@ if (! empty($conf->global->MAIN_MOTD)) } -print '
'; + /* @@ -112,7 +112,7 @@ $boxstat=''; // Load translation files required by page $langs->loadLangs(array('commercial', 'bills', 'orders', 'contracts')); -if (empty($user->societe_id)) +if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) { $boxstat.='
'; $boxstat.=''; @@ -359,9 +359,8 @@ if (empty($user->societe_id)) $boxstat.='
'; $boxstat.='
'; } -//print $boxstat; -print '
'; + /* @@ -636,7 +635,13 @@ $boxwork.='
'; // End table array of working board $boxwork.=''; -print '
'; + + +print '
'; +print $boxwork; +print '
'; + +print '
'; print '
'; @@ -649,7 +654,7 @@ $boxlist.='
'; $boxlist.='
'; -$boxlist.=$boxwork; +//$boxlist.=$boxwork; $boxlist.=$resultboxes['boxlista']; $boxlist.= '
'; From 8b56ca8cd03ecf02a7b0fb7045b5f906a57d1819 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 29 Jul 2019 17:14:52 +0200 Subject: [PATCH 282/798] Little css and images change --- htdocs/theme/eldy/img/title_bank.png | Bin 638 -> 501 bytes htdocs/theme/eldy/img/title_commercial.png | Bin 650 -> 431 bytes htdocs/theme/eldy/img/title_home.png | Bin 474 -> 750 bytes htdocs/theme/eldy/img/title_products.png | Bin 374 -> 687 bytes htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- 5 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/img/title_bank.png b/htdocs/theme/eldy/img/title_bank.png index c916e89d8f65eb07682f788919715f2d829aad7b..5bd5d25a1eaf5da8b760719867d116addbb76666 100644 GIT binary patch literal 501 zcmVKQbqZWJ*-SB^#rf*p+c#me8wBh|4C|AHiY~5S%X-dE4-6Ufw@?2 z6Q>EJigKDe4LP0ysW``iQubxrKntC?yfyPxw#oNLeO!~ia%-VbJQ@2qkgehrTqvmA zKTFrIL(r|^zag`Ktz0vWU|AZ$vNVEaX#~sC2$rQ0EX&jj#3mf7i{{TC+>5OI&zJxbV3s{usHY(s2CpZfmUz+Sf=%I3r7olKp3Z&xnxL+i# r-;_KRE$$b|7CxqP8Oc#QNa literal 638 zcmV-^0)hRBP)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^-6 z4KXAJaWQiM00I6!AMY|_yYV@l!P0AL_>qZ z0g#dt;G6(Mk7RC;Kt;7Q<7l;V91|yT41UrUYme=x-M4RM*J6yJs@S2zsL9vlYw{Js zZq`i^X#+ut{6b?)xDnaqXnqffL}UmwfnL?zrUjh+{O% z7ce>71PGkxLrw8XzpdBuzO$djZ9)vb3S8@g4sAyQB5jF7HLY4@ zv<EEoX&~e z2adI@NH8o@^KPwuw;)$1fZ#5n0JeS5fkhy66(*-7;P~&$P;L z8{dh)ToC`6@{LJZ3)Xk~_rO<1{E1VUdPR0)g~=ymtOWFsqWy2+NNXHBk)4;Fq>>VO zmVm71y*a)f<$U*AlhiC(xx~{7vz&=(WD*ylh diff --git a/htdocs/theme/eldy/img/title_commercial.png b/htdocs/theme/eldy/img/title_commercial.png index 6671810c5deaa7447b9e6fe41a32f6b57066791c..cbfe44fa539763fba67dabc62f1083f714ac8afb 100644 GIT binary patch literal 431 zcmV;g0Z{&lP)XN3KY{M5=Ct7dY#w-|I#$p&c3(S%xbg@q>(kqncxzm$h;Na@Y+B#h#WJN zi7{L6)jHD_%xz-23xo3(4bDSFV`^{}xxS84U=7CzmRr8v2j<>3)lM}Sn%_7#_Nv%B z8-oR&u~c2y+X!unnB3*sOR-s4U=bmhtsr{eB!AxEdBB>B6oI3ZWIW*!-!=Q+qzDYt zOe%xHR1U&mpPQr{;iGF8HN59I!FAV8D!8M)hsm~MhWz(5GQkzj+WZ9#_{57HJ{A8j ZegNWfxVi$fRiyv`002ovPDHLkV1l%2vTgtX literal 650 zcmV;50(Jd~P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^-6 z4KXu?qO`OC00Ih0L_t(o!_`^Aje{@{oIT|qO5iHMCD6f90wquaC8UIuKnbCO^L60s zfK;&e*+?A1hQNXWX&(`Gc0Afyk1;Vb&iZ`d#Lub0U$*#DA}Rso08#)Q01Ln}bEBGw znbiV-0pI|zCmeu6EuSLrG5~rQ_rrh}#`(>-t<6gst&)f=fNVj@(yF{`!4r`I@I5iC z1@Mq~Jsp5_jfge6O%izbBU*3(3JKGjml4q?GrK6=rq>QfMG2txynjWtH1|cJ)jA?d zrLVtOZ2-8LT1aB=u$7cV*DH~^A~sPsDFMq1qh6XA@B*? zoF3&cl7>V%var>n)dXMr4jmIBPNE7{#8-JB^09*s$L-wJJZOm+-EOHqW z>ib2MvXNt8Hp8^F+U#qTO(^lR=Uqaj^R;Bt+8Vrl!}=Dxf+wOpAk-oFDbJtp&HNNw zuGbhIhhlyPTSK;g17oiu{_Vkwz_Pi_&n%sEFXks%8u^%H*Z${TmkX`(L48;7iN`9$ zzg!S-&D?XUjJKLLLBrSN^7YrdfC=E8j7ekqc_ZH4dH@c8H?lh?Q7;!fZPW0dCgj%@yM{6#xJL07*qoM6N<$f{ThDTmS$7 diff --git a/htdocs/theme/eldy/img/title_home.png b/htdocs/theme/eldy/img/title_home.png index 505d18ab403a14820316e0e9e51ba20c6cec9784..e89613dcd753d62536d1192b0f4b89b0e75ab093 100644 GIT binary patch literal 750 zcmV>vum$-o5fcGq#Gi6tCJx87~+KWLHQZa}<0srTWw}5-q zf~&zvj1=j#fFC%IX@3iH4sHbCvT+NwlMT59k17OA;t7^c7UWj+1wdZlX#82MzAtWH zRmdY43IN=}{Ma`iw*$T*#n_F_R8ss{32a@)pDdjzguW{Ws9I7zSgdkgmN1#JA!bH=2G2pv|nXzw?@Qf7j zU_5ZsMH_G^*)`0Ly$f-_gtvf)F<`kb6k6M3REzdNf+5lAl4vbnmjO(o2OCmt5952l zdlw5rfDL#aX!su6Qr=w{s1PuTucCFEs0D8W-d9+i1>Av;fd=W5qTE?sF0yBNz3|C3 zhQBUlU09Q9RO&6vD~A2PYpg(LTz5i7EvQR9 zuc|U!Hqvi%9X4kHi>YyvAsa&=*=zkjsj^2i|GT-8T&V1 gR-K~T_>`)upQk|lC+m|yIRF3v07*qoM6N<$g0pf*Q~&?~ literal 474 zcmV<00VV#4P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^-6 z4KoLpAR>bR00CM_L_t(o!|j>dZG$irhQCwwy^N3z!Ukc4jKBu%2+anJkWt76bOX8p z8=Srvi69aV#9XZUNWX+EUp~;e*jQARQ0SeAeKJOMS`t7Qk8OG+o z7jSeAobo9QcXKZV@A^K2e)$Ew!viT$8lk(&HiHKe z;5q}kRRg4}!@EFiUI1@Z0m<6%K2=(I_E@A&B2t80VLwIW>@Ckbm#J288*>0#pc7YB zbpzGU0vJPeY&HTP4d6%6hna= zJNRRCn+PA_Bm5%pRj}}?+8FlZzOD3`=g;n!NU{)Y4P4r1>phjkOXQ904^L8r#{ED; Q#Q*>R07*qoM6N<$f*aez@c;k- diff --git a/htdocs/theme/eldy/img/title_products.png b/htdocs/theme/eldy/img/title_products.png index 100edf445f129bfc7d97186aea3337af6f07f4b2..c608a2c7a8607a03af4088de526a0335749ae105 100644 GIT binary patch literal 687 zcmV;g0#N;lP)kfMciIoofjr%x>wRM8+#uz?yfy%Sb7{~sq zpf=zP=1M^2**q>t$|6YpUSX&WTmt)W1s_WWT)?H&7D~>2kIUGT2elsO@wBAl@0i4K zNygh6O0P|(W6JoP!#S*LJKKn7C7sOTEQa%*IHTco>}<&xk0rHlyx@dIT*cl3PNw$iv-XOqkS${@h3y}$@Ir8bgYD>}c0TU7#P1GNTxux>2T0Ygh;RRN1EuG#_1wx?PF?_zra zsGfj%TU`u2!mCgxRRTuQf51@vOMqQjnv!1?tEnbV<9U~R%T2tkm*=mtV3XL@Wz6d) zuGdMW7+703NILw4_>For2W-CJ{F^%V>cg0>0I)3BG!Eq_HTlQ)AOhe;oWPTU<7Xrv zxP^5@SVn)u%2+?e%4l%L>H>`p77Mg;ut7m<2kTTGXcVwUsDq3S;8=Qo4-aEF{R2xY V!0-roM&1Ab002ovPDHLkV1h=`GfMyf literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3HE>Y`eG%NHG=%xjQkeJ16rJ$YD$Jc6R~N zK=9LfcRi5eEbxddW?zuQ z;~{U815aywFY^x0zJk0%Tz(8W2RM2Tu)SjId%%(R;m_ietw&<^$T6O&KFR8I>7Kjh z(xVd}}!@Z;ra>sqxe8_%!lYXGq?-l!hhBmKW ze6@b|(kU;lI(Np&I=uZLyzk>uC3%^`&fM2db(=0NQ_h^vy5Ka6rSG3RA diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index f02c25113ef..c1ea24c3070 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -38,9 +38,9 @@ $theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC')); // Colors $colorbackhmenu1='60,70,100'; // topmenu -$colorbackvmenu1='248,248,248'; // vmenu +$colorbackvmenu1='249,250,252'; // vmenu $colortopbordertitle1='200,200,200'; // top border of title -$colorbacktitle1='220,220,223'; // title of tables,list +$colorbacktitle1='233,234,238'; // title of tables,list $colorbacktabcard1='255,255,255'; // card $colorbacktabactive='234,234,234'; $colorbacklineimpair1='255,255,255'; // line impair From 567c4bf97b402b850b0c6e2b8cf460df1c9fdf5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josep=20Llu=C3=ADs?= Date: Mon, 29 Jul 2019 18:17:48 +0200 Subject: [PATCH 283/798] FIX: resource tpls directories search resource tpls also in custom modules directories --- htdocs/resource/element_resource.php | 52 +++++++++++++++++++--------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php index 2e4085200a2..e2e0e0eb0ee 100644 --- a/htdocs/resource/element_resource.php +++ b/htdocs/resource/element_resource.php @@ -1,6 +1,7 @@ * Copyright (C) 2016 Gilles Poirier + * Copyright (C) 2019 Josep Lluís Amador * * 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 @@ -474,29 +475,46 @@ else $linked_resources = $object->getElementResources($element, $element_id, $resource_obj); - - // If we have a specific template we use it - if(file_exists(dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_add.tpl.php'))) + // Output template part (modules that overwrite templates must declare this into descriptor) + $defaulttpldir='/core/tpl'; + $dirtpls=array_merge($conf->modules_parts['tpl'], array($defaulttpldir), array($path.$defaulttpldir)); + + foreach($dirtpls as $module => $reldir) { - $res=include dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_add.tpl.php'); - } - else - { - $res=include DOL_DOCUMENT_ROOT . '/core/tpl/resource_add.tpl.php'; + if(file_exists(dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_add.tpl.php'))) + { + $tpl = dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_add.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/resource_add.tpl.php'; + } + if (empty($conf->file->strict_mode)) { + $res=@include $tpl; + } else { + $res=include $tpl; // for debug + } + if ($res) break; } if ($mode != 'add' || $resource_obj != $resource_type) { - //print load_fiche_titre($langs->trans(ucfirst($element_prop['element']).'Singular')); - - // If we have a specific template we use it - if(file_exists(dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_view.tpl.php'))) + foreach($dirtpls as $module => $reldir) { - $res=@include dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_view.tpl.php'); - } - else - { - $res=include DOL_DOCUMENT_ROOT . '/core/tpl/resource_view.tpl.php'; + if(file_exists(dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_view.tpl.php'))) + { + $tpl = dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_view.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/resource_view.tpl.php'; + } + if (empty($conf->file->strict_mode)) { + $res=@include $tpl; + } else { + $res=include $tpl; // for debug + } + if ($res) break; } } } From d2bc3ac1ef7f4cb97913e695e7f0ed33bcde2aa2 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 29 Jul 2019 18:34:21 +0200 Subject: [PATCH 284/798] FIX stripe webhook ID constant set --- htdocs/stripe/admin/stripe.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 770678aae15..c2b2143f277 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -55,6 +55,9 @@ if ($action == 'setvalue' && $user->admin) if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_TEST_SECRET_KEY", GETPOST('STRIPE_TEST_SECRET_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); + if (! $result > 0) + $error ++; + $result = dolibarr_set_const($db, "STRIPE_TEST_WEBHOOK_ID", GETPOST('STRIPE_TEST_WEBHOOK_ID', 'alpha'), 'chaine', 0, '', $conf->entity); if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_TEST_WEBHOOK_KEY", GETPOST('STRIPE_TEST_WEBHOOK_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); @@ -64,6 +67,9 @@ if ($action == 'setvalue' && $user->admin) if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_LIVE_SECRET_KEY", GETPOST('STRIPE_LIVE_SECRET_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); + if (! $result > 0) + $error ++; + $result = dolibarr_set_const($db, "STRIPE_LIVE_WEBHOOK_ID", GETPOST('STRIPE_LIVE_WEBHOOK_ID', 'alpha'), 'chaine', 0, '', $conf->entity); if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_LIVE_WEBHOOK_KEY", GETPOST('STRIPE_LIVE_WEBHOOK_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); From 10344d9c34d9f9b9ac5864c5fed280cf799e887b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 02:24:04 +0200 Subject: [PATCH 285/798] Try to use the new scrutinizer engine --- .scrutinizer.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index b48aa158cce..85809bcc058 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -1,6 +1,12 @@ # .scrutinizer.yml #build: # - php-scrutinizer-run +build: + nodes: + analysis: + tests: + override: + - php-scrutinizer-run imports: - javascript From 8228979e6777fc71e3aaaedf884637713b401632 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 30 Jul 2019 09:18:18 +0200 Subject: [PATCH 286/798] Fix travis --- htdocs/core/class/stats.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index f873b0f5deb..a15800f8ce6 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -106,7 +106,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; + $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; $year++; } } @@ -206,7 +206,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From b146004966870bca95acbd269b0563932a5e8356 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 30 Jul 2019 11:06:40 +0200 Subject: [PATCH 287/798] Fix travis --- htdocs/core/boxes/box_graph_propales_permonth.php | 2 +- htdocs/core/class/stats.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 7179f255add..78cbadc6fb2 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -195,7 +195,7 @@ class box_graph_propales_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index a15800f8ce6..85a6f43ed4d 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -106,7 +106,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; + $data[$i][]=$datay[$year - (1 - ((int) ($i+$startmonth)/12) + ($startmonth == 0 ? 1 : 0))][($i+$startmonth)%12][1]; $year++; } } @@ -206,7 +206,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - ((int) ($i+$startmonth)/12) + ($startmonth == 0 ? 1 : 0))][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From 5880d549fbe430580b32ab3bc57e64b0c7c3baf0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 30 Jul 2019 11:55:46 +0200 Subject: [PATCH 288/798] Fix php error with const --- htdocs/compta/cashcontrol/cashcontrol_card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 61acf6e3a89..378d6087cc7 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -247,7 +247,7 @@ if ($action=="create" || $action=="start") } // Get the bank account dedicated to this point of sale module/terminal - $vartouse=CASHDESK_ID_BANKACCOUNT_CASH.$terminaltouse; + $vartouse='CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse; $bankid = $conf->global->$vartouse; // This value is ok for 'Terminal 0' for module 'CashDesk' and 'TakePos' (they manage only 1 terminal) // Hook to get the good bank id according to posmodule and posnumber. // @TODO add hook here From 449ef9200752de8e3feea2eefd606de80c037ee0 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Tue, 30 Jul 2019 12:31:03 +0200 Subject: [PATCH 289/798] FIX: categories import: prevent mismatch between category type and object type --- .../modules/import/import_csv.modules.php | 21 ++++++++++++++----- .../modules/import/import_xlsx.modules.php | 21 ++++++++++++++----- htdocs/core/modules/modCategorie.class.php | 14 +++++++++---- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index a6473eaeb8e..776d8dfa04f 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -493,15 +493,24 @@ class ImportCsv extends ModeleImports if (! empty($objimport->array_import_regex[0][$val]) && ($newval != '')) { // If test is "Must exist in a field@table" - if (preg_match('/^(.*)@(.*)$/',$objimport->array_import_regex[0][$val],$reg)) + if (preg_match('/^(.+)@([^:]+)(:.+)?$/',$objimport->array_import_regex[0][$val],$reg)) { $field=$reg[1]; $table=$reg[2]; + $filter=substr($reg[3], 1); + + $cachekey = $field.'@'.$table; + if(! empty($filter)) $cachekey.= ':'.$filter; // Load content of field@table into cache array - if (! is_array($this->cachefieldtable[$field.'@'.$table])) // If content of field@table not already loaded into cache + if (! is_array($this->cachefieldtable[$cachekey])) // If content of field@table not already loaded into cache { $sql="SELECT ".$field." as aliasfield FROM ".$table; + if(! empty($filter)) + { + $sql.= ' WHERE ' . $filter; + } + $resql=$this->db->query($sql); if ($resql) { @@ -510,7 +519,7 @@ class ImportCsv extends ModeleImports while ($i < $num) { $obj=$this->db->fetch_object($resql); - if ($obj) $this->cachefieldtable[$field.'@'.$table][]=$obj->aliasfield; + if ($obj) $this->cachefieldtable[$cachekey][]=$obj->aliasfield; $i++; } } @@ -521,9 +530,11 @@ class ImportCsv extends ModeleImports } // Now we check cache is not empty (should not) and key is into cache - if (! is_array($this->cachefieldtable[$field.'@'.$table]) || ! in_array($newval,$this->cachefieldtable[$field.'@'.$table])) + if (! is_array($this->cachefieldtable[$cachekey]) || ! in_array($newval,$this->cachefieldtable[$cachekey])) { - $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$table); + $tableforerror = $table; + if(! empty($filter)) $tableforerror.= ':'.$filter; + $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$tableforerror); $this->errors[$error]['type']='FOREIGNKEY'; $errorforthistable++; $error++; diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 7f222f523ca..d58fd16cf2f 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -519,15 +519,24 @@ class ImportXlsx extends ModeleImports if (! empty($objimport->array_import_regex[0][$val]) && ($newval != '')) { // If test is "Must exist in a field@table" - if (preg_match('/^(.*)@(.*)$/',$objimport->array_import_regex[0][$val],$reg)) + if (preg_match('/^(.+)@([^:]+)(:.+)?$/',$objimport->array_import_regex[0][$val],$reg)) { $field=$reg[1]; $table=$reg[2]; + $filter=substr($reg[3], 1); + + $cachekey = $field.'@'.$table; + if(! empty($filter)) $cachekey.= ':'.$filter; // Load content of field@table into cache array - if (! is_array($this->cachefieldtable[$field.'@'.$table])) // If content of field@table not already loaded into cache + if (! is_array($this->cachefieldtable[$cachekey])) // If content of field@table not already loaded into cache { $sql="SELECT ".$field." as aliasfield FROM ".$table; + if(! empty($filter)) + { + $sql.= ' WHERE ' . $filter; + } + $resql=$this->db->query($sql); if ($resql) { @@ -536,7 +545,7 @@ class ImportXlsx extends ModeleImports while ($i < $num) { $obj=$this->db->fetch_object($resql); - if ($obj) $this->cachefieldtable[$field.'@'.$table][]=$obj->aliasfield; + if ($obj) $this->cachefieldtable[$cachekey][]=$obj->aliasfield; $i++; } } @@ -547,9 +556,11 @@ class ImportXlsx extends ModeleImports } // Now we check cache is not empty (should not) and key is into cache - if (! is_array($this->cachefieldtable[$field.'@'.$table]) || ! in_array($newval,$this->cachefieldtable[$field.'@'.$table])) + if (! is_array($this->cachefieldtable[$cachekey]) || ! in_array($newval,$this->cachefieldtable[$cachekey])) { - $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$table); + $tableforerror = $table; + if(! empty($filter)) $tableforerror.= ':'.$filter; + $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$tableforerror); $this->errors[$error]['type']='FOREIGNKEY'; $errorforthistable++; $error++; diff --git a/htdocs/core/modules/modCategorie.class.php b/htdocs/core/modules/modCategorie.class.php index 50074779955..668b0ac9014 100644 --- a/htdocs/core/modules/modCategorie.class.php +++ b/htdocs/core/modules/modCategorie.class.php @@ -422,8 +422,8 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('cp'=>MAIN_DB_PREFIX.'categorie_product'); - $this->import_fields_array[$r]=array('cp.fk_categorie'=>"Category*",'cp.fk_product'=>"Product*" - ); + $this->import_fields_array[$r]=array('cp.fk_categorie'=>"Category*",'cp.fk_product'=>"Product*"); + $this->import_regex_array[$r]=array('cp.fk_categorie'=>'rowid@'.MAIN_DB_PREFIX.'categorie:type=0'); $this->import_convertvalue_array[$r]=array( 'cp.fk_categorie'=>array('rule'=>'fetchidfromref','classfile'=>'/categories/class/categorie.class.php','class'=>'Categorie','method'=>'fetch','element'=>'category'), @@ -441,7 +441,10 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('cs'=>MAIN_DB_PREFIX.'categorie_societe'); - $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"ThirdParty*" + $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"ThirdParty*"); + $this->import_regex_array[$r]=array( + 'cs.fk_categorie'=>'rowid@'.MAIN_DB_PREFIX.'categorie:type=2', + 'cs.fk_soc'=>'rowid@'.MAIN_DB_PREFIX.'societe:client>0' ); $this->import_convertvalue_array[$r]=array( @@ -460,7 +463,10 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('cs'=>MAIN_DB_PREFIX.'categorie_fournisseur'); - $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"Supplier*" + $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"Supplier*"); + $this->import_regex_array[$r]=array( + 'cs.fk_categorie'=>'rowid@'.MAIN_DB_PREFIX.'categorie:type=1', + 'cs.fk_soc'=>'rowid@'.MAIN_DB_PREFIX.'societe:fournisseur>0' ); $this->import_convertvalue_array[$r]=array( From 6aefa648e71a4f336c2f336be4c87f3bc0c92b71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 14:00:43 +0200 Subject: [PATCH 290/798] FIX CVE-2019-11199 --- htdocs/viewimage.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php index 073aaa9fb24..3db6e9fb803 100644 --- a/htdocs/viewimage.php +++ b/htdocs/viewimage.php @@ -170,7 +170,9 @@ if (GETPOST('type','alpha')) $type=GETPOST('type','alpha'); else $type=dol_mimetype($original_file); // Security: This wrapper is for images. We do not allow type/html -if (preg_match('/html/', $type)) accessforbidden('Error: Using the image wrapper to output a file with a mime type HTML is not possible.', 1, 1, 1); +if (preg_match('/html/i', $type)) accessforbidden('Error: Using the image wrapper to output a file with a mime type HTML is not possible.', 1, 1, 1); +// Security: This wrapper is for images. We do not allow files ending with .noexe +if (preg_match('/\.noexe$/i', $original_file)) accessforbidden('Error: Using the image wrapper to output a file ending with .noexe is not allowed.', 1, 1, 1); // Security: Delete string ../ into $original_file $original_file = str_replace("../","/", $original_file); From de293c4ef2ec2aa3a5c60eace86d448437facaf4 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Tue, 30 Jul 2019 14:09:03 +0200 Subject: [PATCH 291/798] FIX issue #9300: install error with PostgreSQL when using custom table prefix --- htdocs/install/step2.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/install/step2.php b/htdocs/install/step2.php index 30b3ff7d64f..a53e5f07ee7 100644 --- a/htdocs/install/step2.php +++ b/htdocs/install/step2.php @@ -451,6 +451,11 @@ if ($action == "set") $buffer=trim($buffer); if ($buffer) { + // Replace the prefix in table names + if ($dolibarr_main_db_prefix != 'llx_') + { + $buffer=preg_replace('/llx_/i',$dolibarr_main_db_prefix,$buffer); + } dolibarr_install_syslog("step2: request: " . $buffer); print "\n"; $resql=$db->query($buffer,0,'dml'); From 703506c0e2674795fdf0dd2f9f78ee7f3c98b5b0 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Tue, 30 Jul 2019 14:11:21 +0200 Subject: [PATCH 292/798] FIX: import filter error --- htdocs/core/modules/import/import_csv.modules.php | 2 +- htdocs/core/modules/import/import_xlsx.modules.php | 2 +- 2 files 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 776d8dfa04f..e0ec89379af 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -497,7 +497,7 @@ class ImportCsv extends ModeleImports { $field=$reg[1]; $table=$reg[2]; - $filter=substr($reg[3], 1); + $filter=!empty($reg[3])?substr($reg[3], 1):''; $cachekey = $field.'@'.$table; if(! empty($filter)) $cachekey.= ':'.$filter; diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index d58fd16cf2f..7d850ccfb8b 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -523,7 +523,7 @@ class ImportXlsx extends ModeleImports { $field=$reg[1]; $table=$reg[2]; - $filter=substr($reg[3], 1); + $filter=!empty($reg[3])?substr($reg[3], 1):''; $cachekey = $field.'@'.$table; if(! empty($filter)) $cachekey.= ':'.$filter; From db69a07bc448948cd9e2bcb12c1c8705a7e9c1bf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 15:21:26 +0200 Subject: [PATCH 293/798] FIX Option THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION --- htdocs/societe/card.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 34784beefcb..3f7b97fee73 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -383,7 +383,7 @@ if (empty($reshook)) } else $object->canvas=$canvas; - if (GETPOST("private") == 1) // Ask to create a contact + if (GETPOST("private", 'int') == 1) // Ask to create a contact { $object->particulier = GETPOST("private"); @@ -1172,13 +1172,18 @@ else // If javascript on, we show option individual if ($conf->use_javascript_ajax) { - print '
'.$form->editfieldkey('FirstName', 'firstname', '', $object, 0).'
'.$form->editfieldkey('UserTitle', 'civility_id', '', $object, 0).''; - print $formcompany->select_civility($object->civility_id, 'civility_id', 'maxwidth100').'
'.$form->editfieldkey('FirstName', 'firstname', '', $object, 0).'
'.$form->editfieldkey('UserTitle', 'civility_id', '', $object, 0).''; + print $formcompany->select_civility($object->civility_id, 'civility_id', 'maxwidth100').'
'.$langs->trans("RUMWillBeGenerated").'
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum'), 'date_rum', 0,0,1, 'date_rum').'
'.$form->selectDate(GETPOST('date_rum'), 'date_rum', 0, 0, 1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); From a871aa818b5d3e931bb2214ead646723735c771e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 18:15:04 +0200 Subject: [PATCH 296/798] FIX #11460 FIX #11492 FIX #11576 FIX #11590 --- htdocs/core/tpl/objectline_create.tpl.php | 50 ++++++++++++++++------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index bf46ecb9890..ebb9e8a41ac 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -255,6 +255,25 @@ if ($nolinesbefore) { { $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, 1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); } + + if (empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) + { + ?> + + select_produits_fournisseurs($object->socid, GETPOST('idprodfournprice'), 'idprodfournprice', '', '', $ajaxoptions, 1, $alsoproductwithnosupplierprice, 'maxwidth300'); - ?> - - global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_SUPPLIER_PRODUCTS)) + { + ?> + + '; echo ''; From e54c6fb5e2e1af537925b2d74457e6ee7caf12f1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 19:30:56 +0200 Subject: [PATCH 297/798] FIX #11460 FIX #11492 FIX #11576 FIX #11590 --- htdocs/core/tpl/objectline_create.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index ebb9e8a41ac..75c6f72e1df 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -256,7 +256,7 @@ if ($nolinesbefore) { $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, 1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); } - if (empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) + if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) { ?> '; - } - } - } -} -else -{ - print '
'; - $langs->load("errors"); - print $langs->trans("ErrorModuleSetupNotComplete"); - print '
'; - $action=''; -} - - -print '
'; - -$head = array(); - -if ($action == 'editcontent') -{ - /* - * Editing global variables not related to a specific theme - */ - - $csscontent = @file_get_contents($filecss); - - $contentforedit = ''; - /*$contentforedit.=''."\n";*/ - $contentforedit .= $objectpage->content; - - require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor('PAGE_CONTENT', $contentforedit, '', 500, 'Full', '', true, true, true, ROWS_5, '90%'); - $doleditor->Create(0, '', false); -} print "
\n\n"; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index a9746ca6f65..7a24fad83af 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3506,7 +3506,7 @@ class Propal extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Proposal")); return ""; } } diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 6bb47f12a12..0fd061ac7ed 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2591,7 +2591,7 @@ if ($action == 'create' && $user->rights->commande->creer) } } else { $langs->load("errors"); - print ''; + print ''; } } } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index a8b75341ed3..13bc74bc6f1 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3452,7 +3452,7 @@ class Facture extends CommonInvoice else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Invoice")); return ""; } } diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index d9a912ea50b..26e3f2792d6 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -489,7 +489,7 @@ class RemiseCheque extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Bank")); return ""; } } diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php index a3c79d23602..614782c519b 100644 --- a/htdocs/compta/paiement/class/paiement.class.php +++ b/htdocs/compta/paiement/class/paiement.class.php @@ -1141,7 +1141,7 @@ class Paiement extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Invoice")); return ""; } } diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index d0c69fbe61b..ddbec62e413 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -78,7 +78,7 @@ if (empty($reshook)) // $conf->global->PRELEVEMENT_CODE_BANQUE and $conf->global->PRELEVEMENT_CODE_GUICHET should be empty $bprev = new BonPrelevement($db); $executiondate = dol_mktime(0, 0, 0, GETPOST('remonth'), (GETPOST('reday')+$conf->global->PRELEVEMENT_ADDDAYS), GETPOST('reyear')); - + $result = $bprev->create($conf->global->PRELEVEMENT_CODE_BANQUE, $conf->global->PRELEVEMENT_CODE_GUICHET, $mode, $format, $executiondate); if ($result < 0) { @@ -116,7 +116,7 @@ llxHeader('', $langs->trans("NewStandingOrder")); if (prelevement_check_config() < 0) { $langs->load("errors"); - setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); + setEventMessages($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Withdraw")), null, 'errors'); } /*$h=0; diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index 4e2c4e2d3a5..1be716f8f61 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -58,7 +58,7 @@ llxHeader('', $langs->trans("CustomersStandingOrdersArea")); if (prelevement_check_config() < 0) { $langs->load("errors"); - setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); + setEventMessages($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Withdraw")), null, 'errors'); } print load_fiche_titre($langs->trans("CustomersStandingOrdersArea")); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 147d31311d3..e81febde6df 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -245,7 +245,7 @@ class Contrat extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Contract")); return ""; } } diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 45ad69f6c64..b48fef9759a 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -701,7 +701,7 @@ class PaiementFourn extends Paiement else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Supplier")); return ""; } } diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 8e4d42559a8..4c8e761da9a 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -90,7 +90,7 @@ ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module. ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this vendor ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created because of too-low quantities -ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete. +ErrorModuleSetupNotComplete=Setup of module %s looks to be uncomplete. Go on Home - Setup - Modules to complete. ErrorBadMask=Error on mask ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number ErrorBadMaskBadRazMonth=Error, bad reset value diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index 1cf435379cd..a223f936638 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -90,7 +90,7 @@ ErrorSpecialCharNotAllowedForField=Les caractères spéciaux ne sont pas admis p ErrorNumRefModel=Une référence existe en base (%s) et est incompatible avec cette numérotation. Supprimez la ligne ou renommez la référence pour activer ce module. ErrorQtyTooLowForThisSupplier=Quantité insuffisante pour ce fournisseur ou aucun tarif défini sur ce produit pour ce fournisseur ErrorOrdersNotCreatedQtyTooLow=Certaines commandes n'ont pas été créées en raison de quantités trop faibles -ErrorModuleSetupNotComplete=La configuration des modules semble incomplète. Aller sur la page Accueil - Configuration - Modules pour corriger. +ErrorModuleSetupNotComplete=La configuration du module '%s' semble incomplète. Aller sur la page Accueil - Configuration - Modules pour corriger. ErrorBadMask=Erreur sur le masque ErrorBadMaskFailedToLocatePosOfSequence=Erreur, masque sans numéro de séquence ErrorBadMaskBadRazMonth=Erreur, mauvais valeur de remise à zéro diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 0a967cb10a7..a9e712c92db 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1928,7 +1928,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment // JS Code for Stripe if (empty($stripearrayofkeys['publishable_key'])) { - print info_admin($langs->trans("ErrorModuleSetupNotComplete", "stripe"), 0, 0, 'error'); + $langs->load("errors"); + print info_admin($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Stripe")), 0, 0, 'error'); } else { diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index c9275293bb2..964812a05a3 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -224,21 +224,25 @@ $object = new Societe($db); * Actions */ -if ($action=="change") +if ($action=="change") // Change customer for TakePOS { $idcustomer = GETPOST('idcustomer', 'int'); $place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant - $sql="UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".$idcustomer." where ref='(PROV-POS-".$place.")'"; + // @TODO Check if draft invoice already exists, if not create it or return a warning to ask to enter at least one line to have it created automatically + $sql="UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".$idcustomer." where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'"; $resql = $db->query($sql); - ?> - - + + load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("SupplierProposal")); return ""; } } diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index b952285747b..0a91e303a53 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -125,8 +125,8 @@ print '
'.$langs->trans("Parameters").''.$langs->trans("Value").'
'.$langs->trans("CashDeskThirdPartyForSell").''; +print '
'.$langs->trans("CashDeskThirdPartyForSell").''; print $form->select_company($conf->global->{'CASHDESK_ID_THIRDPARTY'.$terminaltouse}, 'socid', '(s.client IN (1, 3) AND s.status = 1)', 1, 0, 0, array(), 0); print '
'.$langs->trans("CashDeskBankAccountForSell").''; + print ''; $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 0, "courant=2", 1); + if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse})) $atleastonefound++; print '
'.$langs->trans("CashDeskBankAccountForCheque").''; + print ''; $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 0, "courant=1", 1); + if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse})) $atleastonefound++; print '
'.$langs->trans("CashDeskBankAccountForCB").''; + print ''; $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 0, "courant=1", 1); + if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse})) $atleastonefound++; print '
'.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->libelle).''; + print ''; if (! empty($conf->global->$name)) $atleastonefound++; $cour=preg_match('/^LIQ.*/', $modep->code)?2:1; $form->select_comptes($conf->global->$name, $name, 0, "courant=".$cour, 1); @@ -162,7 +165,7 @@ if (! empty($conf->stock->enabled)) { print '
'.$langs->trans("CashDeskDoNotDecreaseStock").''; + print ''; if (empty($conf->productbatch->enabled)) { print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}, 1); } @@ -180,7 +183,7 @@ if (! empty($conf->stock->enabled)) print '
'.$langs->trans("CashDeskIdWareHouse").''; + print ''; if (! $disabled) { print $formproduct->selectWarehouses($conf->global->{'CASHDESK_ID_WAREHOUSE'.$terminal}, 'CASHDESK_ID_WAREHOUSE'.$terminal, '', 1, $disabled); @@ -195,7 +198,7 @@ if (! empty($conf->stock->enabled)) print '
'; -if (empty($atleastonefound) && ! empty($conf->banque->enabled)) +if ($atleastonefound == 0 && ! empty($conf->banque->enabled)) { print info_admin($langs->trans("AtLeastOneDefaultBankAccountMandatory"), 0, 0, 'error'); } diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 79c7eee3d56..e09c31664cd 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -42,7 +42,7 @@ $langs->loadLangs(array("bills", "cashdesk")); $id = GETPOST('id', 'int'); $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 +$place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Bar or Restaurant /** * Abort invoice creationg with a given error message @@ -184,9 +184,21 @@ if (($action=="addline" || $action=="freezone") && $placeid == 0) $invoice->module_source = 'takepos'; $invoice->pos_source = $_SESSION["takeposterminal"]; - $placeid = $invoice->create($user); - $sql="UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid=".$placeid; - $db->query($sql); + if ($invoice->socid <= 0) + { + $langs->load('errors'); + dol_htmloutput_errors($langs->trans("ErrorModuleSetupNotComplete", "TakePos"), null, 1); + } + else + { + $placeid = $invoice->create($user); + if ($placeid < 0) + { + dol_htmloutput_errors($invoice->error, $invoice->errors, 1); + } + $sql="UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid=".$placeid; + $db->query($sql); + } } if ($action == "addline") diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 702bb082714..dba42a105ae 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -352,7 +352,7 @@ function deleteline() { } function Customer() { - console.log("Open box to select the thirdparty"); + console.log("Open box to select the thirdparty place="+place); $.colorbox({href:"../societe/list.php?contextpage=poslist&nomassaction=1&place="+place, width:"90%", height:"80%", transition:"none", iframe:"true", title:"trans("Customer");?>"}); } @@ -619,7 +619,7 @@ $sql = "SELECT code, libelle FROM ".MAIN_DB_PREFIX."c_paiement"; $sql.= " WHERE entity IN (".getEntity('c_paiement').")"; $sql.= " AND active = 1"; $sql.= " ORDER BY libelle"; -print $sql; + $resql = $db->query($sql); $paiementsModes = array(); if ($resql){ @@ -634,7 +634,8 @@ if ($resql){ } } if (empty($paiementsModes)) { - setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); + $langs->load('errors'); + setEventMessages($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("TakePOS")), null, 'errors'); } if (count($maincategories)==0) { setEventMessages($langs->trans("TakeposNeedsCategories"), null, 'errors'); diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 46e42c351c7..2ad328b5a88 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -120,7 +120,7 @@ if ($id > 0) if (empty($conf->global->CLICKTODIAL_URL) && empty($object->clicktodial_url)) { $langs->load("errors"); - print ''.$langs->trans("ErrorModuleSetupNotComplete").''; + print ''.$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("ClickToDial")).''; } else { @@ -161,7 +161,7 @@ if ($id > 0) if (empty($url)) { $langs->load("errors"); - print ''.$langs->trans("ErrorModuleSetupNotComplete").''; + print ''.$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("ClickToDial")).''; } else { From 9b84987cc1499eaa9fe1e55fe948965d4202fb32 Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 1 Aug 2019 12:33:19 +0200 Subject: [PATCH 311/798] prepare new dashboard --- htdocs/adherents/class/adherent.class.php | 1 + htdocs/comm/action/class/actioncomm.class.php | 1 + htdocs/comm/propal/class/propal.class.php | 5 +- htdocs/commande/class/commande.class.php | 1 + htdocs/compta/facture/class/facture.class.php | 1 + htdocs/contrat/class/contrat.class.php | 4 + htdocs/core/class/workboardresponse.class.php | 12 + .../class/expensereport.class.php | 2 + .../class/fournisseur.commande.class.php | 1 + .../fourn/class/fournisseur.facture.class.php | 1 + htdocs/holiday/class/holiday.class.php | 1 + htdocs/index.php | 223 +++++++++++++++--- htdocs/langs/en_US/contracts.lang | 3 + htdocs/langs/en_US/main.lang | 3 + htdocs/langs/en_US/members.lang | 3 +- htdocs/projet/class/project.class.php | 1 + .../class/supplier_proposal.class.php | 4 + htdocs/theme/eldy/global.inc.php | 8 + htdocs/theme/eldy/img/title_document.png | Bin 0 -> 570 bytes htdocs/theme/eldy/info-box.inc.php | 114 +++++++++ htdocs/theme/md/img/title_document.png | Bin 0 -> 570 bytes 21 files changed, 359 insertions(+), 30 deletions(-) create mode 100644 htdocs/theme/eldy/img/title_document.png create mode 100644 htdocs/theme/eldy/info-box.inc.php create mode 100644 htdocs/theme/md/img/title_document.png diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index dc894663e4c..12825d9a780 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2315,6 +2315,7 @@ class Adherent extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->adherent->subscription->warning_delay/60/60/24; $response->label=$langs->trans("MembersWithSubscriptionToReceive"); + $response->labelShort=$langs->trans("MembersWithSubscriptionToReceiveShort"); $response->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&statut=1&filter=outofdate'; $response->img=img_object('', "user"); diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 6e4e3fb941b..79ae09c1678 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1103,6 +1103,7 @@ class ActionComm extends CommonObject $response = new WorkboardResponse(); $response->warning_delay = $conf->agenda->warning_delay/60/60/24; $response->label = $langs->trans("ActionsToDo"); + $response->labelShort = $langs->trans("ActionsToDoShort"); $response->url = DOL_URL_ROOT.'/comm/action/list.php?actioncode=0&status=todo&mainmenu=agenda'; if ($user->rights->agenda->allactions->read) $response->url.='&filtert=-1'; $response->img = img_object('', "action", 'class="inline-block valigntextmiddle"'); diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index c1dde5e2aa4..481f6a5096f 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3277,21 +3277,24 @@ class Propal extends CommonObject $delay_warning = 0; $statut = 0; - $label = ''; + $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->propal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("PropalsToClose"); + $labelShort = $langs->trans("ToClose"); } if ($mode == 'signed') { $delay_warning=$conf->propal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("PropalsToBill"); // We set here bill but may be billed or ordered + $labelShort = $langs->trans("ToBill"); } $response = new WorkboardResponse(); $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals'; $response->url_late = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals&sortfield=p.datep&sortorder=asc'; $response->img = img_object('', "propal"); diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index b1e2262f109..fb246c7e232 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3411,6 +3411,7 @@ class Commande extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->client->warning_delay/60/60/24; $response->label=$langs->trans("OrdersToProcess"); + $response->labelShort = $langs->trans("ToProcess"); $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders'; $response->img=img_object('', "order"); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index e5b8c0795ed..00b25b64506 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3889,6 +3889,7 @@ class Facture extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->client->warning_delay/60/60/24; $response->label=$langs->trans("CustomerBillsUnpaid"); + $response->labelShort=$langs->trans("Unpaid"); $response->url=DOL_URL_ROOT.'/compta/facture/list.php?search_status=1&mainmenu=billing&leftmenu=customers_bills'; $response->img=img_object('', "bill"); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0fb460466ef..666b80fb2d4 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -2186,23 +2186,27 @@ class Contrat extends CommonObject if ($mode == 'inactive') { $warning_delay = $conf->contrat->services->inactifs->warning_delay; $label = $langs->trans("BoardNotActivatedServices"); + $labelShort = $langs->trans("BoardNotActivatedServicesShort"); $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=0&sortfield=cd.date_fin_validite&sortorder=asc'; } elseif ($mode == 'expired') { $warning_delay = $conf->contrat->services->expires->warning_delay; $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired&sortfield=cd.date_fin_validite&sortorder=asc'; $label = $langs->trans("BoardExpiredServices"); + $labelShort = $langs->trans("BoardExpiredServicesShort"); } else { $warning_delay = $conf->contrat->services->expires->warning_delay; $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=4&sortfield=cd.date_fin_validite&sortorder=asc'; //$url.= '&op2day='.$arraydatetouse['mday'].'&op2month='.$arraydatetouse['mon'].'&op2year='.$arraydatetouse['year']; //if ($warning_delay >= 0) $url.='&filter=expired'; $label = $langs->trans("BoardRunningServices"); + $labelShort = $langs->trans("BoardRunningServicesShort"); } $response = new WorkboardResponse(); $response->warning_delay = $warning_delay/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = $url; $response->img = img_object('', "contract"); diff --git a/htdocs/core/class/workboardresponse.class.php b/htdocs/core/class/workboardresponse.class.php index 35449693599..3af5feaecbc 100644 --- a/htdocs/core/class/workboardresponse.class.php +++ b/htdocs/core/class/workboardresponse.class.php @@ -37,6 +37,18 @@ class WorkboardResponse */ public $label; + /** + * Short Label of the warning + * @var string + */ + public $labelShort; + + /** + * infoKey of the warning + * @var string + */ + public $infoKey = 'todo'; + /** * URL to list to do items * @var string diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 34f60120925..272125530e3 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2333,12 +2333,14 @@ class ExpenseReport extends CommonObject { $response->warning_delay=$conf->expensereport->approve->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToApprove"); + $response->labelShort=$langs->trans("ToApprove"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=2'; } else { $response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToPay"); + $response->labelShort=$langs->trans("ToPay"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=5'; } $response->img=img_object('', "trip"); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 9d5bfce0189..a77206d5f42 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -2835,6 +2835,7 @@ class CommandeFournisseur extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SuppliersOrdersToProcess"); + $response->labelShort=$langs->trans("ToProcess"); $response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3&mainmenu=commercial&leftmenu=orders_suppliers'; $response->img=img_object('', "order"); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 41ac2f126a7..dcafc3bdbf2 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2213,6 +2213,7 @@ class FactureFournisseur extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SupplierBillsToPay"); + $response->labelShort=$langs->trans("ToPay"); $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; $response->img=img_object($langs->trans("Bills"), "bill"); diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 533f6c9c748..b540ba8248e 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2243,6 +2243,7 @@ class Holiday extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->holiday->approve->warning_delay/60/60/24; $response->label=$langs->trans("HolidaysToApprove"); + $response->labelShort=$langs->trans("ToApprove"); $response->url=DOL_URL_ROOT.'/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=holiday'; $response->img=img_object('', "holiday"); diff --git a/htdocs/index.php b/htdocs/index.php index bce4c521ad5..6276d85f579 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -374,13 +374,15 @@ $dashboardlines=array(); // Do not include sections without management permission require_once DOL_DOCUMENT_ROOT.'/core/class/workboardresponse.class.php'; + + // Number of actions to do (late) if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read) { include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $board=new ActionComm($db); - - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; // deprecated } // Number of project opened @@ -388,7 +390,8 @@ if (! empty($conf->projet->enabled) && $user->rights->projet->lire) { include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; $board=new Project($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of tasks to do (late) @@ -396,7 +399,8 @@ if (! empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) { include_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; $board=new Task($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of commercial proposals opened (expired) @@ -404,9 +408,13 @@ if (! empty($conf->propal->enabled) && $user->rights->propale->lire) { include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $board=new Propal($db); - $dashboardlines[] = $board->load_board($user, "opened"); - // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[] = $board->load_board($user, "signed"); + + $workBoard = $board->load_board($user, "opened"); + $dashboardlines[$board->element.'_opened'] = $workBoard; + + $workBoard = $board->load_board($user, "signed"); + $dashboardlines[$board->element.'_signed'] = $workBoard; + } // Number of commercial proposals opened (expired) @@ -414,9 +422,13 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos { include_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; $board=new SupplierProposal($db); - $dashboardlines[] = $board->load_board($user, "opened"); + + $workBoard = $board->load_board($user, "opened"); + $dashboardlines[$board->element.'_opened'] = $workBoard; + // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[] = $board->load_board($user, "signed"); + $workBoard = $board->load_board($user, "signed"); + $dashboardlines[$board->element.'_signed'] = $workBoard; } // Number of customer orders a deal @@ -424,7 +436,8 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) { include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $board=new Commande($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of suppliers orders a deal @@ -432,7 +445,8 @@ if (! empty($conf->supplier_order->enabled) && $user->rights->fournisseur->comma { include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; $board=new CommandeFournisseur($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of services enabled (delayed) @@ -440,16 +454,20 @@ if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire) { include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $board=new Contrat($db); - $dashboardlines[] = $board->load_board($user, "inactive"); + $workBoard = $board->load_board($user, "inactive"); + $dashboardlines[$board->element.'_inactive'] = $workBoard; + // Number of active services (expired) - $dashboardlines[] = $board->load_board($user, "active"); + $workBoard = $board->load_board($user, "active"); + $dashboardlines[$board->element.'_active'] = $workBoard; } // Number of invoices customers (has paid) if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $board=new Facture($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of supplier invoices (has paid) @@ -457,7 +475,8 @@ if (! empty($conf->supplier_invoice->enabled) && ! empty($user->rights->fourniss { include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $board=new FactureFournisseur($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of transactions to conciliate @@ -468,7 +487,8 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s $nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate if ($nb > 0) { - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } } @@ -477,7 +497,7 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s { include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php'; $board=new RemiseCheque($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['RemiseCheque'] = $board->load_board($user); } // Number of foundation members @@ -485,7 +505,7 @@ if (! empty($conf->adherent->enabled) && $user->rights->adherent->lire && ! $use { include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; $board=new Adherent($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['Adherent'] = $board->load_board($user); } // Number of expense reports to approve @@ -493,7 +513,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->appr { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); - $dashboardlines[] = $board->load_board($user, 'toapprove'); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove'); } // Number of expense reports to pay @@ -501,7 +521,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->to_p { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); - $dashboardlines[] = $board->load_board($user, 'topay'); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay'); } // Number of holidays to approve @@ -509,7 +529,7 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->approve) { include_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; $board=new Holiday($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['Holiday'] = $board->load_board($user); } $object=new stdClass(); @@ -520,15 +540,103 @@ if ($reshook == 0) { $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray); } +/* grouping dashboard stats */ +$dashboardgroup = array ( + 'action' => + array ( + 'groupName' => 'Agenda', + 'stats' => array ('action'), + ), + 'project' => + array ( + 'groupName' => 'Projects', + 'stats' => array ('project','project_task'), + ), + 'propal' => + array ( + 'groupName' => 'Proposals', + 'stats' => + array ('propal_opened','propal_signed'), + ), + 'supplier_proposal' => + array ( + 'groupName' => 'SupplierProposals', + 'stats' => + array ('supplier_proposal_opened','supplier_proposal_signed'), + ), + 'commande' => + array ( + 'groupName' => 'Orders', + 'stats' => + array ('commande'), + ), + 'order_supplier' => + array ( + 'groupName' => 'SuppliersOrders', + 'stats' => + array ('order_supplier'), + ), + 'contrat' => + array ( + 'groupName' => 'Contracts', + 'stats' => + array ('contrat_inactive','contrat_active'), + ), + 'facture' => + array ( + 'groupName' => 'Invoices', + 'stats' => + array ('facture'), + ), + 'invoice_supplier' => + array ( + 'groupName' => 'SupplierInvoices', + 'stats' => + array ('invoice_supplier'), + ), + 'bank_account' => + array ( + 'groupName' => 'BankAccount', + 'stats' => + array ('bank_account','RemiseCheque'), + ), + /*'RemiseCheque' => + array ( + 'groupName' => 'BankChecks', + 'stats' => + array ('RemiseCheque'), + ),*/ + 'Adherent' => + array ( + 'groupName' => 'Members', + 'stats' => + array ('Adherent'), + ), + 'ExpenseReport' => + array ( + 'groupName' => 'ExpenseReport', + 'stats' => + array ('ExpenseReport'), + ), + 'Holiday' => + array ( + 'groupName' => 'Holidays', + 'stats' => + array ('Holiday'), + ), +); + + + // Calculate total nb of late $totallate=$totaltodo=0; //Remove any invalid response //load_board can return an integer if failed or WorkboardResponse if OK $valid_dashboardlines=array(); -foreach($dashboardlines as $tmp) +foreach($dashboardlines as $infoKey => $tmp) { - if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[] = $tmp; + if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[$infoKey] = $tmp; } // We calculate $totallate. Must be defined before start of next loop because it is show in first fetch on next loop @@ -578,14 +686,64 @@ $boxwork.='
'; - foreach($valid_dashboardlines as $board) + foreach($dashboardgroup as $groupKey => $groupElement) { + + $boards = array(); + foreach ($groupElement['stats'] as $infoKey) + { + if(!empty($valid_dashboardlines[$infoKey])) + { + $boards[] = $valid_dashboardlines[$infoKey]; + } + } + + if(!empty($boards)) + { + $groupName = $langs->trans($groupElement['groupName']); + $groupKeyLowerCase = strtolower($groupKey); + + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= ' '."\n"; + $openedDashBoard.= '
'."\n"; + + $openedDashBoard .= ' '.$groupName.'' . "\n"; + + foreach($boards as $board) { + $infoName = !empty($board->labelShort) ? $board->labelShort : $board->label ; + + $textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate); + $textLateTitle.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + + $textLate = img_picto($textLateTitle, "warning_white", 'class="inline-block hideonsmartphone valigntextbottom"').''; + $textLate .= ''; + $textLate .= $board->nbtodolate; + $textLate .= ''; + + $openedDashBoard .= ' '.$infoName.' : '.$board->nbtodo.''.$textLate.'' . "\n"; + } + + + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.="\n"; + } + + } + + + foreach($valid_dashboardlines as $infoKey => $board) { if (empty($board->nbtodo)) $nbworkboardempty++; - $textlate = $langs->trans("NActionsLate", $board->nbtodolate); - $textlate.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + + + $boxwork .='
'; $boxwork .= '
'; @@ -611,6 +769,15 @@ if (! empty($valid_dashboardlines)) } $boxwork.='
'; $boxwork .="\n"; + + + + + + + + + } $boxwork .='
'; @@ -638,7 +805,7 @@ $boxwork.='
'; print '
'; -print $boxwork; +print '
'.$openedDashBoard.'
'; print '
'; print '
'; @@ -654,7 +821,7 @@ $boxlist.='
'; $boxlist.='
'; -//$boxlist.=$boxwork; +$boxlist.=$boxwork; $boxlist.=$resultboxes['boxlista']; $boxlist.= '
'; diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang index 129b7d8416a..47572c355ab 100644 --- a/htdocs/langs/en_US/contracts.lang +++ b/htdocs/langs/en_US/contracts.lang @@ -51,6 +51,7 @@ ListOfClosedServices=List of closed services ListOfRunningServices=List of running services NotActivatedServices=Inactive services (among validated contracts) BoardNotActivatedServices=Services to activate among validated contracts +BoardNotActivatedServicesShort=Services to activate LastContracts=Latest %s contracts LastModifiedServices=Latest %s modified services ContractStartDate=Start date @@ -65,7 +66,9 @@ DateEndReal=Real end date DateEndRealShort=Real end date CloseService=Close service BoardRunningServices=Services running +BoardRunningServicesShort=Services running BoardExpiredServices=Services expired +BoardExpiredServicesShort=Services expired ServiceStatus=Status of service DraftContracts=Drafts contracts CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 1cadc32f4ab..7f99a51a064 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -981,3 +981,6 @@ PaymentInformation=Payment information ValidFrom=Valid from ValidUntil=Valid until NoRecordedUsers=No users +ToClose=To close +ToProcess=To process +ToApprove=To approve diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index acae5aa73fb..5886c598d52 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -29,6 +29,7 @@ MenuMembersUpToDate=Up to date members MenuMembersNotUpToDate=Out of date members MenuMembersResiliated=Terminated members MembersWithSubscriptionToReceive=Members with subscription to receive +MembersWithSubscriptionToReceiveShort=Subscription to receive DateSubscription=Subscription date DateEndSubscription=Subscription end date EndSubscription=End subscription @@ -197,4 +198,4 @@ SendReminderForExpiredSubscriptionTitle=Send reminder by email for expired subsc SendReminderForExpiredSubscription=Send reminder by email to members when subscription is about to expire (parameter is number of days before end of subscription to send the remind. It can be a list of days separated by a semicolon, for example '10;5;0;-5') MembershipPaid=Membership paid for current period (until %s) YouMayFindYourInvoiceInThisEmail=You may find your invoice attached to this email -XMembersClosed=%s member(s) closed \ No newline at end of file +XMembersClosed=%s member(s) closed diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index eecf314dbf6..6e2b0a73a5e 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1796,6 +1796,7 @@ class Project extends CommonObject $response = new WorkboardResponse(); $response->warning_delay = $conf->projet->warning_delay/60/60/24; $response->label = $langs->trans("OpenedProjects"); + $response->labelShort = $langs->trans("Opened"); if ($user->rights->projet->all->lire) $response->url = DOL_URL_ROOT.'/projet/list.php?search_status=1&mainmenu=project'; else $response->url = DOL_URL_ROOT.'/projet/list.php?search_project_user=-1&search_status=1&mainmenu=project'; $response->img = img_object('', "projectpub"); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index f3e0315c75f..e871652a56d 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -2281,20 +2281,24 @@ class SupplierProposal extends CommonObject $resql=$this->db->query($sql); if ($resql) { + $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->supplier_proposal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); + $labelShort = $langs->trans("ToClose"); } if ($mode == 'signed') { $delay_warning=$conf->supplier_proposal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered + $labelShort = $langs->trans("ToProcess"); } $response = new WorkboardResponse(); $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = DOL_URL_ROOT.'/supplier_proposal/list.php?viewstatut='.$statut; $response->img = img_object('', "propal"); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d0a0c5958ef..15f87cb6203 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3198,7 +3198,13 @@ span.boxstatsindicator { font-size: 130%; font-weight: normal; line-height: 29px; + flex-grow: 1; + } + + + + span.dashboardlineindicator, span.dashboardlineindicatorlate { font-size: 130%; font-weight: normal; @@ -5750,3 +5756,5 @@ div.tabsElem a.tab { %A_P)R3T1Tlqm)FKby#{*c} zDu|8v1U`WX78Zh~d4L45vP&YQFp$ziaOSeModMvj>-Z*}e=BO$VaQ$wCR>+T&{!AF?Kmr6Q+vncZ( z6A?U#hm~|{(E27B3)ZE|F_X&=JjVA#>fP`fcOG#loe@mi>EMI5S!5X zR#-}tD|i}T>lSH!ll-@WA4h8Ohuz%7d2ATn7lm(lBJnTj7X$X6)0gJvOaK4?07*qo IM6N<$f_KdB8~^|S literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php new file mode 100644 index 00000000000..51d32ebc45f --- /dev/null +++ b/htdocs/theme/eldy/info-box.inc.php @@ -0,0 +1,114 @@ + +/* )', $objectpage->htmlheader); From 91cdb2a5a8c026c0a372860204ba23a745a62ccc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 07:05:06 +0200 Subject: [PATCH 477/798] Add more logs --- htdocs/core/lib/website.lib.php | 7 ++++--- htdocs/core/lib/website2.lib.php | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index ebfceab89d9..7e813caa5d6 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -183,15 +183,16 @@ function dolKeepOnlyPhpCode($str) * * @param string $content Content string * @param string $contenttype Content type + * @param string $contentlabel Content label * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html') +function dolWebsiteOutput($content, $contenttype='html', $contentlabel='') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." contentlabel=".$contentlabel." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); @@ -294,7 +295,7 @@ function dolWebsiteOutput($content, $contenttype='html') * * @param string $content Content string * @return void - * @see dolWebsiteOutput + * @see dolWebsiteOutput() */ /* function dolWebsiteSaveContent($content) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index a67c0f9f142..53f9e5f11c9 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -138,7 +138,7 @@ function dolSavePageContent($filetpl, $object, $objectpage) $tplcontent.= ''."\n"; $tplcontent.= 'id.');'."\n"; $tplcontent.= "// END PHP ?>"."\n"; //var_dump($filetpl);exit; From 49e61e237c9593a1938a98aa4b2fbd7c5f854e45 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 07:08:45 +0200 Subject: [PATCH 478/798] Better log --- htdocs/core/lib/website.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 7e813caa5d6..4d89210cd44 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -183,16 +183,16 @@ function dolKeepOnlyPhpCode($str) * * @param string $content Content string * @param string $contenttype Content type - * @param string $contentlabel Content label + * @param int $containerid Contenair id * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html', $contentlabel='') +function dolWebsiteOutput($content, $contenttype='html', $containerid='') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." contentlabel=".$contentlabel." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." containerid=".$containerid." 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 056f51bfc559678c965082d56d616d38fa7271e4 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 13 Aug 2019 07:14:42 +0200 Subject: [PATCH 479/798] FIX duplicate css tag, decrease padding-bottom for boxes in eldy theme --- htdocs/theme/eldy/global.inc.php | 10 ++++------ htdocs/theme/md/style.css.php | 9 +++------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index a137b91236f..4df7a6ba014 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3080,6 +3080,10 @@ ul.noborder li:nth-child(even):not(.liste_titre) { .box { overflow-x: auto; min-height: 40px; + padding-right: 0px; + padding-left: 0px; + /*padding-bottom: 25px;*/ + padding-bottom: 10px; } .ficheaddleft div.boxstats, .ficheaddright div.boxstats { border: none; @@ -3266,12 +3270,6 @@ a.valignmiddle.dashboardlineindicator { line-height: 30px; } -.box { - padding-right: 0px; - padding-left: 0px; - padding-bottom: 25px; -} - tr.box_titre { height: 26px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 8999a73aaea..704610eca82 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3344,6 +3344,9 @@ ul.noborder li:nth-child(even):not(.liste_titre) { .box { overflow-x: auto; min-height: 40px; + padding-right: 0px; + padding-left: 0px; + padding-bottom: 12px; } .ficheaddleft div.boxstats, .ficheaddright div.boxstats { border: none; @@ -3470,12 +3473,6 @@ a.valignmiddle.dashboardlineindicator { line-height: 30px; } -.box { - padding-right: 0px; - padding-left: 0px; - padding-bottom: 12px; -} - tr.box_titre { height: 26px !important; From 34579dd4dbdfb80fb1789b35163a04fa35a1df8e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 13 Aug 2019 07:46:03 +0200 Subject: [PATCH 480/798] FIX phpcs --- 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 510539f7421..b745956d3ca 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -185,7 +185,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html') +function dolWebsiteOutput($content, $contenttype = 'html') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From b443b1b37284812af0d7fb16ec5d3fb7ae659542 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 14:21:43 +0200 Subject: [PATCH 481/798] FIX permission check on API intervention --- htdocs/fichinter/class/api_interventions.class.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php index 2702ad6c55e..9e1d717d36a 100644 --- a/htdocs/fichinter/class/api_interventions.class.php +++ b/htdocs/fichinter/class/api_interventions.class.php @@ -80,7 +80,7 @@ class Interventions extends DolibarrApi $result = $this->fichinter->fetch($id); if( ! $result ) { - throw new RestException(404, 'Intervention report not found'); + throw new RestException(404, 'Intervention not found'); } if( ! DolibarrApi::_checkAccessToResource('fichinter', $this->fichinter->id)) { @@ -174,10 +174,10 @@ class Interventions extends DolibarrApi } } else { - throw new RestException(503, 'Error when retrieve fichinter list : '.$db->lasterror()); + throw new RestException(503, 'Error when retrieve intervention list : '.$db->lasterror()); } if( ! count($obj_ret)) { - throw new RestException(404, 'No finchinter found'); + throw new RestException(404, 'No intervention found'); } return $obj_ret; } @@ -200,7 +200,7 @@ class Interventions extends DolibarrApi } if ($this->fichinter->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating fichinter", array_merge(array($this->fichinter->error), $this->fichinter->errors)); + throw new RestException(500, "Error creating intervention", array_merge(array($this->fichinter->error), $this->fichinter->errors)); } return $this->fichinter->id; @@ -301,7 +301,7 @@ class Interventions extends DolibarrApi throw new RestException(404, 'Intervention not found'); } - if( ! DolibarrApi::_checkAccessToResource('commande', $this->fichinter->id)) { + if( ! DolibarrApi::_checkAccessToResource('fichinter', $this->fichinter->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } From 717ea523e971ecfc36565debdd1d94a4c80afdfb Mon Sep 17 00:00:00 2001 From: ATM john Date: Tue, 13 Aug 2019 15:54:32 +0200 Subject: [PATCH 482/798] Fix lang and add size control --- htdocs/index.php | 16 +++++++++++----- htdocs/theme/eldy/info-box.inc.php | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index e56d9652c29..7daed2d4c7e 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -570,7 +570,7 @@ $dashboardgroup = array ( ), 'invoice_supplier' => array ( - 'groupName' => 'SupplierInvoices', + 'groupName' => 'BillsSuppliers', 'stats' => array ('invoice_supplier'), ), @@ -636,6 +636,13 @@ foreach($valid_dashboardlines as $board) } } +$openedDashBoardSize = 'info-box-sm'; // use sm by default +foreach ($dashboardgroup as $dashbordelement){ + if(is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){ + $openedDashBoardSize = ''; // use default info box size : big + } +} + $totalLateNumber = $totallate; $totallatePercentage = !empty($totaltodo) ? round($totallate / $totaltodo * 100, 2) : 0; if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $totallate = $totallatePercentage; @@ -681,7 +688,6 @@ if (!empty($valid_dashboardlines)) $boxwork.='
'; - foreach($dashboardgroup as $groupKey => $groupElement) { $boards = array(); @@ -703,7 +709,7 @@ if (!empty($valid_dashboardlines)) $groupKeyLowerCase = strtolower($groupKey); $openedDashBoard.= '
'."\n"; - $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; $openedDashBoard.= ' '."\n"; $openedDashBoard.= '
'."\n"; @@ -760,7 +766,7 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard= '
'."\n"; - $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; @@ -858,7 +864,7 @@ $boxwork.='
'; if(!empty($isIntopOpenedDashBoard)) { print '
'; - print '
' . $openedDashBoard . '
'; + print '
' . $openedDashBoard . '
'; print '
'; } diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index f6a3b2027c0..7aa00c2fade 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -15,6 +15,11 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> border-radius: 2px; margin-bottom: 15px; } +.info-box.info-box-sm{ + min-height: 70px; + margin-bottom: 10px; +} + .info-box small { font-size: 14px; } @@ -57,6 +62,12 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> line-height: 90px; background: rgba(0, 0, 0, 0.2); } +.info-box-sm .info-box-icon{ + height: 70px; + width: 70px; + font-size: 25px; + line-height: 70px; +} .info-box-icon > img { max-width: 100%; } @@ -64,6 +75,10 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> padding: 5px 10px; margin-left: 90px; } + +.info-box-sm .info-box-content{ + margin-left: 70px; +} .info-box-number { display: block; font-weight: bold; From 2a068030e5557634f429fecc7aee2e604bd2ebff Mon Sep 17 00:00:00 2001 From: ATM john Date: Tue, 13 Aug 2019 16:01:15 +0200 Subject: [PATCH 483/798] Fix : foreach optimized --- htdocs/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/index.php b/htdocs/index.php index 7daed2d4c7e..b7eebe24063 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -640,6 +640,7 @@ $openedDashBoardSize = 'info-box-sm'; // use sm by default foreach ($dashboardgroup as $dashbordelement){ if(is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){ $openedDashBoardSize = ''; // use default info box size : big + break; } } From b90815b972eff2168203148421e27e4b638fdef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Tue, 13 Aug 2019 16:36:41 +0200 Subject: [PATCH 484/798] FIX require product class (fixes POST /supplierinvoices REST API endpoint) When passing a fk_product field into a supplier invoice line on the POST /supplierinvoices REST API endpoint, we need to require the product class first in fournisseur.facture.class.php to be able to load the Product from the passed id. --- htdocs/fourn/class/fournisseur.facture.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 41ac2f126a7..132fcbc9e47 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -36,6 +36,7 @@ include_once DOL_DOCUMENT_ROOT.'/core/class/commoninvoice.class.php'; require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; /** * Class to manage suppliers invoices From e3bca063a004851de5bf93094aa07a9335d1f5e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Tue, 13 Aug 2019 17:06:46 +0200 Subject: [PATCH 485/798] Fix CI code style checks Not my fault but I am disciplined so, if the CI says it is an error ... I just fix it to get green again ;) --- htdocs/core/lib/website.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4d89210cd44..579c5575988 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -33,7 +33,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html') { $nbrep = 0; @@ -187,7 +187,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From 8198276d64856cd7fe9cf27c9d6a9e39c63dce7f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 13 Aug 2019 17:47:30 +0200 Subject: [PATCH 486/798] FIX for MAIN_MAXTABS_IN_CARD = $i card --- htdocs/core/lib/functions.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e9f4301f8f2..a46bd661eb2 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1130,7 +1130,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) { // If active tab is already present - if ($i >= $limittoshow) $limittoshow--; + if ($i > $limittoshow) $limittoshow--; } } @@ -1146,7 +1146,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab $isactive=false; } - if ($i < $limittoshow || $isactive) + if ($i <= $limittoshow || $isactive) { $out.='
'; if (isset($links[$i][2]) && $links[$i][2] == 'image') From 93d64bb84e3278891a52332bae037a31df58329f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 13 Aug 2019 17:59:19 +0200 Subject: [PATCH 487/798] Update functions.lib.php --- 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 a46bd661eb2..9d85ab85048 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1130,7 +1130,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) { // If active tab is already present - if ($i > $limittoshow) $limittoshow--; + if ($i >= $limittoshow) $limittoshow--; } } From df5382642603a9c3b115ecba0757bdc27c52f9fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 18:22:18 +0200 Subject: [PATCH 488/798] FIX Missing some replacements in website module --- htdocs/core/lib/website.lib.php | 6 +++++- htdocs/website/index.php | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4d89210cd44..3a6a580d43f 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -93,6 +93,9 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content=preg_replace('/(href=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); $content=preg_replace('/(src=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + // Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: ...href="/viewimage.php?modulepart=" + $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + dol_syslog('dolWebsiteReplacementOfLinks end', LOG_DEBUG); return $content; @@ -185,7 +188,7 @@ function dolKeepOnlyPhpCode($str) * @param string $contenttype Content type * @param int $containerid Contenair id * @return void - * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on + * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context. */ function dolWebsiteOutput($content, $contenttype='html', $containerid='') { @@ -228,6 +231,7 @@ function dolWebsiteOutput($content, $contenttype='html', $containerid='') // Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: href="/viewimage.php?modulepart=" => href="/dolibarr/viewimage.php?modulepart=" $content=preg_replace('/(href=")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); $content=preg_replace('/(src=")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); // Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/ $content=preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 35b5444e0b2..8ac8de1a5ca 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3057,9 +3057,10 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') print '
'; print ''; print ''; + print ''; - print ''."\n"; + print ''."\n"; print '

'; print load_fiche_titre($langs->trans("ReplaceWebsiteContent")); From 53b43eb98a7681957c6ddfac94a44cabf9d0ba52 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 19:34:21 +0200 Subject: [PATCH 489/798] Fix error message --- htdocs/fichinter/class/api_interventions.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php index 2702ad6c55e..4808d224916 100644 --- a/htdocs/fichinter/class/api_interventions.class.php +++ b/htdocs/fichinter/class/api_interventions.class.php @@ -177,7 +177,7 @@ class Interventions extends DolibarrApi throw new RestException(503, 'Error when retrieve fichinter list : '.$db->lasterror()); } if( ! count($obj_ret)) { - throw new RestException(404, 'No finchinter found'); + throw new RestException(404, 'No intervention found'); } return $obj_ret; } From bc230c2d2517e9a0480b37f2d4ff7024d15e33c6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 01:43:06 +0200 Subject: [PATCH 490/798] FIX Bad error management in zip compress and web site export --- htdocs/core/lib/files.lib.php | 24 +++++++++++++++++++--- htdocs/website/class/website.class.php | 15 +++++++++++--- htdocs/website/index.php | 28 +++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 92b739b3190..ac7e97afab2 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1893,6 +1893,8 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") try { + dol_syslog("dol_compress_file mode=".$mode." inputfile=".$inputfile." outputfile=".$outputfile); + $data = implode("", file(dol_osencode($inputfile))); if ($mode == 'gz') { $foundhandler=1; $compressdata = gzencode($data, 9); } elseif ($mode == 'bz') { $foundhandler=1; $compressdata = bzcompress($data, 9); } @@ -1904,9 +1906,25 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") include_once ODTPHP_PATHTOPCLZIP.'/pclzip.lib.php'; $archive = new PclZip($outputfile); - $archive->add($inputfile, PCLZIP_OPT_REMOVE_PATH, dirname($inputfile)); - //$archive->add($inputfile); - return 1; + $result = $archive->add($inputfile, PCLZIP_OPT_REMOVE_PATH, dirname($inputfile)); + + if ($result === 0) + { + global $errormsg; + $errormsg=$archive->errorInfo(true); + dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); + if ($archive->errorCode() == PCLZIP_ERR_WRITE_OPEN_FAIL) + { + dol_syslog("dol_compress_file error PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR); + return -4; + } + return -3; + } + else + { + dol_syslog("dol_compress_file success - ".count($result)." files"); + return 1; + } } } diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index fffa25cf728..4218552c9aa 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -790,7 +790,7 @@ class Website extends CommonObject /** * Generate a zip with all data of web site. * - * @return string Path to file with zip + * @return string Path to file with zip or '' if error */ public function exportWebSite() { @@ -957,9 +957,18 @@ class Website extends CommonObject $filename = $conf->website->dir_temp.'/'.$website->ref.'/website_'.$website->ref.'-'.dol_print_date(dol_now(), 'dayhourlog').'.zip'; dol_delete_file($fileglob, 0); - dol_compress_file($filedir, $filename, 'zip'); + $result = dol_compress_file($filedir, $filename, 'zip'); - return $filename; + if ($result > 0) + { + return $filename; + } + else + { + global $errormsg; + $this->error = $errormsg; + return ''; + } } diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 8ac8de1a5ca..75df4f2552c 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -338,7 +338,7 @@ if ($action == 'addsite') { $db->begin(); - if (GETPOST('virtualhost', 'alpha') && ! preg_match('/^http/', GETPOST('virtualhost', 'alpha'))) + if (GETPOST('virtualhost', 'alpha') && ! preg_match('/^http/', GETPOST('virtualhost', 'alpha'))) { $error++; setEventMessages($langs->trans('ErrorURLMustStartWithHttp', $langs->transnoentitiesnoconv("VirtualHost")), null, 'errors'); @@ -414,6 +414,7 @@ if ($action == 'addcontainer') { include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php'; + //if (! preg_match('/^http/', $urltograb) && ! preg_match('/^file/', $urltograb)) if (! preg_match('/^http/', $urltograb)) { $error++; @@ -427,6 +428,7 @@ if ($action == 'addcontainer') // Clean url to grab, so url can be // http://www.example.com/ or http://www.example.com/dir1/ or http://www.example.com/dir1/aaa $urltograbwithoutdomainandparam = preg_replace('/^https?:\/\/[^\/]+\/?/i', '', $urltograb); + //$urltograbwithoutdomainandparam = preg_replace('/^file:\/\/[^\/]+\/?/i', '', $urltograb); $urltograbwithoutdomainandparam = preg_replace('/\?.*$/', '', $urltograbwithoutdomainandparam); if (empty($urltograbwithoutdomainandparam) && ! preg_match('/\/$/', $urltograb)) { @@ -1674,6 +1676,10 @@ if ($action == 'exportsite') readfile($fileofzip); exit; } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } } // Import site @@ -3142,6 +3148,7 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa // Ouput page under the Dolibarr top menu $objectpage->fetch($pageid); + $jscontent = @file_get_contents($filejs); $out = ''."\n"; @@ -3156,6 +3163,25 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa $out.="\n\n"; $out.="\n"; $out.=dolWebsiteReplacementOfLinks($object, $objectpage->htmlheader, 1, 'htmlheader'); + + $out.="\n"; + // TODO Keep only the or the '."\n"; print ''."\n"; + print ''."\n"; } // Browser notifications diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 12c23e721e2..6b73907ad70 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2199,7 +2199,53 @@ if (! GETPOST('hide_websitemenu')) print ''."\n"; print '
'; print '
'; + + print ''; + print ''; print $langs->trans("EditInLine"); + print ''; + if ($websitepage->grabbed_from) { //print ''; @@ -2217,6 +2263,7 @@ if (! GETPOST('hide_websitemenu')) print ''.img_picto($langs->trans("EditInLineOn"), 'switch_on', '', false, 0, 0, '', 'nomarginleft').''; } } + print '
'; print '
'; print $langs->trans("ShowSubcontainers"); From 87b2a01a3534c6a8ee521b9afa96688dcefe3a12 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 19:49:07 +0200 Subject: [PATCH 504/798] NEW Add less 2 css converter --- htdocs/core/class/lessc.class.php | 3886 +++++++++++++++++++++++++++++ 1 file changed, 3886 insertions(+) create mode 100644 htdocs/core/class/lessc.class.php diff --git a/htdocs/core/class/lessc.class.php b/htdocs/core/class/lessc.class.php new file mode 100644 index 00000000000..34034226497 --- /dev/null +++ b/htdocs/core/class/lessc.class.php @@ -0,0 +1,3886 @@ + + * Licensed under MIT or GPLv3, see LICENSE + */ + + +/** + * The LESS compiler and parser. + * + * Converting LESS to CSS is a three stage process. The incoming file is parsed + * by `lessc_parser` into a syntax tree, then it is compiled into another tree + * representing the CSS structure by `lessc`. The CSS tree is fed into a + * formatter, like `lessc_formatter` which then outputs CSS as a string. + * + * During the first compile, all values are *reduced*, which means that their + * types are brought to the lowest form before being dump as strings. This + * handles math equations, variable dereferences, and the like. + * + * The `parse` function of `lessc` is the entry point. + * + * In summary: + * + * The `lessc` class creates an instance of the parser, feeds it LESS code, + * then transforms the resulting tree to a CSS tree. This class also holds the + * evaluation context, such as all available mixins and variables at any given + * time. + * + * The `lessc_parser` class is only concerned with parsing its input. + * + * The `lessc_formatter` takes a CSS tree, and dumps it to a formatted string, + * handling things like indentation. + */ +class lessc { + static public $VERSION = "v0.5.0"; + + static public $TRUE = array("keyword", "true"); + static public $FALSE = array("keyword", "false"); + + protected $libFunctions = array(); + protected $registeredVars = array(); + protected $preserveComments = false; + + public $vPrefix = '@'; // prefix of abstract properties + public $mPrefix = '$'; // prefix of abstract blocks + public $parentSelector = '&'; + + public $importDisabled = false; + public $importDir = ''; + + protected $numberPrecision = null; + + protected $allParsedFiles = array(); + + // set to the parser that generated the current line when compiling + // so we know how to create error messages + protected $sourceParser = null; + protected $sourceLoc = null; + + static protected $nextImportId = 0; // uniquely identify imports + + // attempts to find the path of an import url, returns null for css files + protected function findImport($url) { + foreach ((array)$this->importDir as $dir) { + $full = $dir.(substr($dir, -1) != '/' ? '/' : '').$url; + if ($this->fileExists($file = $full.'.less') || $this->fileExists($file = $full)) { + return $file; + } + } + + return null; + } + + protected function fileExists($name) { + return is_file($name); + } + + public static function compressList($items, $delim) { + if (!isset($items[1]) && isset($items[0])) return $items[0]; + else return array('list', $delim, $items); + } + + public static function preg_quote($what) { + return preg_quote($what, '/'); + } + + protected function tryImport($importPath, $parentBlock, $out) { + if ($importPath[0] == "function" && $importPath[1] == "url") { + $importPath = $this->flattenList($importPath[2]); + } + + $str = $this->coerceString($importPath); + if ($str === null) return false; + + $url = $this->compileValue($this->lib_e($str)); + + // don't import if it ends in css + if (substr_compare($url, '.css', -4, 4) === 0) return false; + + $realPath = $this->findImport($url); + + if ($realPath === null) return false; + + if ($this->importDisabled) { + return array(false, "/* import disabled */"); + } + + if (isset($this->allParsedFiles[realpath($realPath)])) { + return array(false, null); + } + + $this->addParsedFile($realPath); + $parser = $this->makeParser($realPath); + $root = $parser->parse(file_get_contents($realPath)); + + // set the parents of all the block props + foreach ($root->props as $prop) { + if ($prop[0] == "block") { + $prop[1]->parent = $parentBlock; + } + } + + // copy mixins into scope, set their parents + // bring blocks from import into current block + // TODO: need to mark the source parser these came from this file + foreach ($root->children as $childName => $child) { + if (isset($parentBlock->children[$childName])) { + $parentBlock->children[$childName] = array_merge( + $parentBlock->children[$childName], + $child); + } else { + $parentBlock->children[$childName] = $child; + } + } + + $pi = pathinfo($realPath); + $dir = $pi["dirname"]; + + list($top, $bottom) = $this->sortProps($root->props, true); + $this->compileImportedProps($top, $parentBlock, $out, $parser, $dir); + + return array(true, $bottom, $parser, $dir); + } + + protected function compileImportedProps($props, $block, $out, $sourceParser, $importDir) { + $oldSourceParser = $this->sourceParser; + + $oldImport = $this->importDir; + + // TODO: this is because the importDir api is stupid + $this->importDir = (array)$this->importDir; + array_unshift($this->importDir, $importDir); + + foreach ($props as $prop) { + $this->compileProp($prop, $block, $out); + } + + $this->importDir = $oldImport; + $this->sourceParser = $oldSourceParser; + } + + /** + * Recursively compiles a block. + * + * A block is analogous to a CSS block in most cases. A single LESS document + * is encapsulated in a block when parsed, but it does not have parent tags + * so all of it's children appear on the root level when compiled. + * + * Blocks are made up of props and children. + * + * Props are property instructions, array tuples which describe an action + * to be taken, eg. write a property, set a variable, mixin a block. + * + * The children of a block are just all the blocks that are defined within. + * This is used to look up mixins when performing a mixin. + * + * Compiling the block involves pushing a fresh environment on the stack, + * and iterating through the props, compiling each one. + * + * See lessc::compileProp() + * + */ + protected function compileBlock($block) { + switch ($block->type) { + case "root": + $this->compileRoot($block); + break; + case null: + $this->compileCSSBlock($block); + break; + case "media": + $this->compileMedia($block); + break; + case "directive": + $name = "@" . $block->name; + if (!empty($block->value)) { + $name .= " " . $this->compileValue($this->reduce($block->value)); + } + + $this->compileNestedBlock($block, array($name)); + break; + default: + $this->throwError("unknown block type: $block->type\n"); + } + } + + protected function compileCSSBlock($block) { + $env = $this->pushEnv(); + + $selectors = $this->compileSelectors($block->tags); + $env->selectors = $this->multiplySelectors($selectors); + $out = $this->makeOutputBlock(null, $env->selectors); + + $this->scope->children[] = $out; + $this->compileProps($block, $out); + + $block->scope = $env; // mixins carry scope with them! + $this->popEnv(); + } + + protected function compileMedia($media) { + $env = $this->pushEnv($media); + $parentScope = $this->mediaParent($this->scope); + + $query = $this->compileMediaQuery($this->multiplyMedia($env)); + + $this->scope = $this->makeOutputBlock($media->type, array($query)); + $parentScope->children[] = $this->scope; + + $this->compileProps($media, $this->scope); + + if (count($this->scope->lines) > 0) { + $orphanSelelectors = $this->findClosestSelectors(); + if (!is_null($orphanSelelectors)) { + $orphan = $this->makeOutputBlock(null, $orphanSelelectors); + $orphan->lines = $this->scope->lines; + array_unshift($this->scope->children, $orphan); + $this->scope->lines = array(); + } + } + + $this->scope = $this->scope->parent; + $this->popEnv(); + } + + protected function mediaParent($scope) { + while (!empty($scope->parent)) { + if (!empty($scope->type) && $scope->type != "media") { + break; + } + $scope = $scope->parent; + } + + return $scope; + } + + protected function compileNestedBlock($block, $selectors) { + $this->pushEnv($block); + $this->scope = $this->makeOutputBlock($block->type, $selectors); + $this->scope->parent->children[] = $this->scope; + + $this->compileProps($block, $this->scope); + + $this->scope = $this->scope->parent; + $this->popEnv(); + } + + protected function compileRoot($root) { + $this->pushEnv(); + $this->scope = $this->makeOutputBlock($root->type); + $this->compileProps($root, $this->scope); + $this->popEnv(); + } + + protected function compileProps($block, $out) { + foreach ($this->sortProps($block->props) as $prop) { + $this->compileProp($prop, $block, $out); + } + $out->lines = $this->deduplicate($out->lines); + } + + /** + * Deduplicate lines in a block. Comments are not deduplicated. If a + * duplicate rule is detected, the comments immediately preceding each + * occurence are consolidated. + */ + protected function deduplicate($lines) { + $unique = array(); + $comments = array(); + + foreach ($lines as $line) { + if (strpos($line, '/*') === 0) { + $comments[] = $line; + continue; + } + if (!in_array($line, $unique)) { + $unique[] = $line; + } + array_splice($unique, array_search($line, $unique), 0, $comments); + $comments = array(); + } + return array_merge($unique, $comments); + } + + protected function sortProps($props, $split = false) { + $vars = array(); + $imports = array(); + $other = array(); + $stack = array(); + + foreach ($props as $prop) { + switch ($prop[0]) { + case "comment": + $stack[] = $prop; + break; + case "assign": + $stack[] = $prop; + if (isset($prop[1][0]) && $prop[1][0] == $this->vPrefix) { + $vars = array_merge($vars, $stack); + } else { + $other = array_merge($other, $stack); + } + $stack = array(); + break; + case "import": + $id = self::$nextImportId++; + $prop[] = $id; + $stack[] = $prop; + $imports = array_merge($imports, $stack); + $other[] = array("import_mixin", $id); + $stack = array(); + break; + default: + $stack[] = $prop; + $other = array_merge($other, $stack); + $stack = array(); + break; + } + } + $other = array_merge($other, $stack); + + if ($split) { + return array(array_merge($imports, $vars), $other); + } else { + return array_merge($imports, $vars, $other); + } + } + + protected function compileMediaQuery($queries) { + $compiledQueries = array(); + foreach ($queries as $query) { + $parts = array(); + foreach ($query as $q) { + switch ($q[0]) { + case "mediaType": + $parts[] = implode(" ", array_slice($q, 1)); + break; + case "mediaExp": + if (isset($q[2])) { + $parts[] = "($q[1]: " . + $this->compileValue($this->reduce($q[2])) . ")"; + } else { + $parts[] = "($q[1])"; + } + break; + case "variable": + $parts[] = $this->compileValue($this->reduce($q)); + break; + } + } + + if (count($parts) > 0) { + $compiledQueries[] = implode(" and ", $parts); + } + } + + $out = "@media"; + if (!empty($parts)) { + $out .= " " . + implode($this->formatter->selectorSeparator, $compiledQueries); + } + return $out; + } + + protected function multiplyMedia($env, $childQueries = null) { + if (is_null($env) || + !empty($env->block->type) && $env->block->type != "media" + ) { + return $childQueries; + } + + // plain old block, skip + if (empty($env->block->type)) { + return $this->multiplyMedia($env->parent, $childQueries); + } + + $out = array(); + $queries = $env->block->queries; + if (is_null($childQueries)) { + $out = $queries; + } else { + foreach ($queries as $parent) { + foreach ($childQueries as $child) { + $out[] = array_merge($parent, $child); + } + } + } + + return $this->multiplyMedia($env->parent, $out); + } + + protected function expandParentSelectors(&$tag, $replace) { + $parts = explode("$&$", $tag); + $count = 0; + foreach ($parts as &$part) { + $part = str_replace($this->parentSelector, $replace, $part, $c); + $count += $c; + } + $tag = implode($this->parentSelector, $parts); + return $count; + } + + protected function findClosestSelectors() { + $env = $this->env; + $selectors = null; + while ($env !== null) { + if (isset($env->selectors)) { + $selectors = $env->selectors; + break; + } + $env = $env->parent; + } + + return $selectors; + } + + + // multiply $selectors against the nearest selectors in env + protected function multiplySelectors($selectors) { + // find parent selectors + + $parentSelectors = $this->findClosestSelectors(); + if (is_null($parentSelectors)) { + // kill parent reference in top level selector + foreach ($selectors as &$s) { + $this->expandParentSelectors($s, ""); + } + + return $selectors; + } + + $out = array(); + foreach ($parentSelectors as $parent) { + foreach ($selectors as $child) { + $count = $this->expandParentSelectors($child, $parent); + + // don't prepend the parent tag if & was used + if ($count > 0) { + $out[] = trim($child); + } else { + $out[] = trim($parent . ' ' . $child); + } + } + } + + return $out; + } + + // reduces selector expressions + protected function compileSelectors($selectors) { + $out = array(); + + foreach ($selectors as $s) { + if (is_array($s)) { + list(, $value) = $s; + $out[] = trim($this->compileValue($this->reduce($value))); + } else { + $out[] = $s; + } + } + + return $out; + } + + protected function eq($left, $right) { + return $left == $right; + } + + protected function patternMatch($block, $orderedArgs, $keywordArgs) { + // match the guards if it has them + // any one of the groups must have all its guards pass for a match + if (!empty($block->guards)) { + $groupPassed = false; + foreach ($block->guards as $guardGroup) { + foreach ($guardGroup as $guard) { + $this->pushEnv(); + $this->zipSetArgs($block->args, $orderedArgs, $keywordArgs); + + $negate = false; + if ($guard[0] == "negate") { + $guard = $guard[1]; + $negate = true; + } + + $passed = $this->reduce($guard) == self::$TRUE; + if ($negate) $passed = !$passed; + + $this->popEnv(); + + if ($passed) { + $groupPassed = true; + } else { + $groupPassed = false; + break; + } + } + + if ($groupPassed) break; + } + + if (!$groupPassed) { + return false; + } + } + + if (empty($block->args)) { + return $block->isVararg || empty($orderedArgs) && empty($keywordArgs); + } + + $remainingArgs = $block->args; + if ($keywordArgs) { + $remainingArgs = array(); + foreach ($block->args as $arg) { + if ($arg[0] == "arg" && isset($keywordArgs[$arg[1]])) { + continue; + } + + $remainingArgs[] = $arg; + } + } + + $i = -1; // no args + // try to match by arity or by argument literal + foreach ($remainingArgs as $i => $arg) { + switch ($arg[0]) { + case "lit": + if (empty($orderedArgs[$i]) || !$this->eq($arg[1], $orderedArgs[$i])) { + return false; + } + break; + case "arg": + // no arg and no default value + if (!isset($orderedArgs[$i]) && !isset($arg[2])) { + return false; + } + break; + case "rest": + $i--; // rest can be empty + break 2; + } + } + + if ($block->isVararg) { + return true; // not having enough is handled above + } else { + $numMatched = $i + 1; + // greater than because default values always match + return $numMatched >= count($orderedArgs); + } + } + + protected function patternMatchAll($blocks, $orderedArgs, $keywordArgs, $skip=array()) { + $matches = null; + foreach ($blocks as $block) { + // skip seen blocks that don't have arguments + if (isset($skip[$block->id]) && !isset($block->args)) { + continue; + } + + if ($this->patternMatch($block, $orderedArgs, $keywordArgs)) { + $matches[] = $block; + } + } + + return $matches; + } + + // attempt to find blocks matched by path and args + protected function findBlocks($searchIn, $path, $orderedArgs, $keywordArgs, $seen=array()) { + if ($searchIn == null) return null; + if (isset($seen[$searchIn->id])) return null; + $seen[$searchIn->id] = true; + + $name = $path[0]; + + if (isset($searchIn->children[$name])) { + $blocks = $searchIn->children[$name]; + if (count($path) == 1) { + $matches = $this->patternMatchAll($blocks, $orderedArgs, $keywordArgs, $seen); + if (!empty($matches)) { + // This will return all blocks that match in the closest + // scope that has any matching block, like lessjs + return $matches; + } + } else { + $matches = array(); + foreach ($blocks as $subBlock) { + $subMatches = $this->findBlocks($subBlock, + array_slice($path, 1), $orderedArgs, $keywordArgs, $seen); + + if (!is_null($subMatches)) { + foreach ($subMatches as $sm) { + $matches[] = $sm; + } + } + } + + return count($matches) > 0 ? $matches : null; + } + } + if ($searchIn->parent === $searchIn) return null; + return $this->findBlocks($searchIn->parent, $path, $orderedArgs, $keywordArgs, $seen); + } + + // sets all argument names in $args to either the default value + // or the one passed in through $values + protected function zipSetArgs($args, $orderedValues, $keywordValues) { + $assignedValues = array(); + + $i = 0; + foreach ($args as $a) { + if ($a[0] == "arg") { + if (isset($keywordValues[$a[1]])) { + // has keyword arg + $value = $keywordValues[$a[1]]; + } elseif (isset($orderedValues[$i])) { + // has ordered arg + $value = $orderedValues[$i]; + $i++; + } elseif (isset($a[2])) { + // has default value + $value = $a[2]; + } else { + $this->throwError("Failed to assign arg " . $a[1]); + $value = null; // :( + } + + $value = $this->reduce($value); + $this->set($a[1], $value); + $assignedValues[] = $value; + } else { + // a lit + $i++; + } + } + + // check for a rest + $last = end($args); + if ($last[0] == "rest") { + $rest = array_slice($orderedValues, count($args) - 1); + $this->set($last[1], $this->reduce(array("list", " ", $rest))); + } + + // wow is this the only true use of PHP's + operator for arrays? + $this->env->arguments = $assignedValues + $orderedValues; + } + + // compile a prop and update $lines or $blocks appropriately + protected function compileProp($prop, $block, $out) { + // set error position context + $this->sourceLoc = isset($prop[-1]) ? $prop[-1] : -1; + + switch ($prop[0]) { + case 'assign': + list(, $name, $value) = $prop; + if ($name[0] == $this->vPrefix) { + $this->set($name, $value); + } else { + $out->lines[] = $this->formatter->property($name, + $this->compileValue($this->reduce($value))); + } + break; + case 'block': + list(, $child) = $prop; + $this->compileBlock($child); + break; + case 'mixin': + list(, $path, $args, $suffix) = $prop; + + $orderedArgs = array(); + $keywordArgs = array(); + foreach ((array)$args as $arg) { + $argval = null; + switch ($arg[0]) { + case "arg": + if (!isset($arg[2])) { + $orderedArgs[] = $this->reduce(array("variable", $arg[1])); + } else { + $keywordArgs[$arg[1]] = $this->reduce($arg[2]); + } + break; + + case "lit": + $orderedArgs[] = $this->reduce($arg[1]); + break; + default: + $this->throwError("Unknown arg type: " . $arg[0]); + } + } + + $mixins = $this->findBlocks($block, $path, $orderedArgs, $keywordArgs); + + if ($mixins === null) { + $this->throwError("{$prop[1][0]} is undefined"); + } + + foreach ($mixins as $mixin) { + if ($mixin === $block && !$orderedArgs) { + continue; + } + + $haveScope = false; + if (isset($mixin->parent->scope)) { + $haveScope = true; + $mixinParentEnv = $this->pushEnv(); + $mixinParentEnv->storeParent = $mixin->parent->scope; + } + + $haveArgs = false; + if (isset($mixin->args)) { + $haveArgs = true; + $this->pushEnv(); + $this->zipSetArgs($mixin->args, $orderedArgs, $keywordArgs); + } + + $oldParent = $mixin->parent; + if ($mixin != $block) $mixin->parent = $block; + + foreach ($this->sortProps($mixin->props) as $subProp) { + if ($suffix !== null && + $subProp[0] == "assign" && + is_string($subProp[1]) && + $subProp[1]{0} != $this->vPrefix + ) { + $subProp[2] = array( + 'list', ' ', + array($subProp[2], array('keyword', $suffix)) + ); + } + + $this->compileProp($subProp, $mixin, $out); + } + + $mixin->parent = $oldParent; + + if ($haveArgs) $this->popEnv(); + if ($haveScope) $this->popEnv(); + } + + break; + case 'raw': + $out->lines[] = $prop[1]; + break; + case "directive": + list(, $name, $value) = $prop; + $out->lines[] = "@$name " . $this->compileValue($this->reduce($value)).';'; + break; + case "comment": + $out->lines[] = $prop[1]; + break; + case "import": + list(, $importPath, $importId) = $prop; + $importPath = $this->reduce($importPath); + + if (!isset($this->env->imports)) { + $this->env->imports = array(); + } + + $result = $this->tryImport($importPath, $block, $out); + + $this->env->imports[$importId] = $result === false ? + array(false, "@import " . $this->compileValue($importPath).";") : + $result; + + break; + case "import_mixin": + list(,$importId) = $prop; + $import = $this->env->imports[$importId]; + if ($import[0] === false) { + if (isset($import[1])) { + $out->lines[] = $import[1]; + } + } else { + list(, $bottom, $parser, $importDir) = $import; + $this->compileImportedProps($bottom, $block, $out, $parser, $importDir); + } + + break; + default: + $this->throwError("unknown op: {$prop[0]}\n"); + } + } + + + /** + * Compiles a primitive value into a CSS property value. + * + * Values in lessphp are typed by being wrapped in arrays, their format is + * typically: + * + * array(type, contents [, additional_contents]*) + * + * The input is expected to be reduced. This function will not work on + * things like expressions and variables. + */ + public function compileValue($value) { + switch ($value[0]) { + case 'list': + // [1] - delimiter + // [2] - array of values + return implode($value[1], array_map(array($this, 'compileValue'), $value[2])); + case 'raw_color': + if (!empty($this->formatter->compressColors)) { + return $this->compileValue($this->coerceColor($value)); + } + return $value[1]; + case 'keyword': + // [1] - the keyword + return $value[1]; + case 'number': + list(, $num, $unit) = $value; + // [1] - the number + // [2] - the unit + if ($this->numberPrecision !== null) { + $num = round($num, $this->numberPrecision); + } + return $num . $unit; + case 'string': + // [1] - contents of string (includes quotes) + list(, $delim, $content) = $value; + foreach ($content as &$part) { + if (is_array($part)) { + $part = $this->compileValue($part); + } + } + return $delim . implode($content) . $delim; + case 'color': + // [1] - red component (either number or a %) + // [2] - green component + // [3] - blue component + // [4] - optional alpha component + list(, $r, $g, $b) = $value; + $r = round($r); + $g = round($g); + $b = round($b); + + if (count($value) == 5 && $value[4] != 1) { // rgba + return 'rgba('.$r.','.$g.','.$b.','.$value[4].')'; + } + + $h = sprintf("#%02x%02x%02x", $r, $g, $b); + + if (!empty($this->formatter->compressColors)) { + // Converting hex color to short notation (e.g. #003399 to #039) + if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) { + $h = '#' . $h[1] . $h[3] . $h[5]; + } + } + + return $h; + + case 'function': + list(, $name, $args) = $value; + return $name.'('.$this->compileValue($args).')'; + default: // assumed to be unit + $this->throwError("unknown value type: $value[0]"); + } + } + + protected function lib_pow($args) { + list($base, $exp) = $this->assertArgs($args, 2, "pow"); + return pow($this->assertNumber($base), $this->assertNumber($exp)); + } + + protected function lib_pi() { + return pi(); + } + + protected function lib_mod($args) { + list($a, $b) = $this->assertArgs($args, 2, "mod"); + return $this->assertNumber($a) % $this->assertNumber($b); + } + + protected function lib_tan($num) { + return tan($this->assertNumber($num)); + } + + protected function lib_sin($num) { + return sin($this->assertNumber($num)); + } + + protected function lib_cos($num) { + return cos($this->assertNumber($num)); + } + + protected function lib_atan($num) { + $num = atan($this->assertNumber($num)); + return array("number", $num, "rad"); + } + + protected function lib_asin($num) { + $num = asin($this->assertNumber($num)); + return array("number", $num, "rad"); + } + + protected function lib_acos($num) { + $num = acos($this->assertNumber($num)); + return array("number", $num, "rad"); + } + + protected function lib_sqrt($num) { + return sqrt($this->assertNumber($num)); + } + + protected function lib_extract($value) { + list($list, $idx) = $this->assertArgs($value, 2, "extract"); + $idx = $this->assertNumber($idx); + // 1 indexed + if ($list[0] == "list" && isset($list[2][$idx - 1])) { + return $list[2][$idx - 1]; + } + } + + protected function lib_isnumber($value) { + return $this->toBool($value[0] == "number"); + } + + protected function lib_isstring($value) { + return $this->toBool($value[0] == "string"); + } + + protected function lib_iscolor($value) { + return $this->toBool($this->coerceColor($value)); + } + + protected function lib_iskeyword($value) { + return $this->toBool($value[0] == "keyword"); + } + + protected function lib_ispixel($value) { + return $this->toBool($value[0] == "number" && $value[2] == "px"); + } + + protected function lib_ispercentage($value) { + return $this->toBool($value[0] == "number" && $value[2] == "%"); + } + + protected function lib_isem($value) { + return $this->toBool($value[0] == "number" && $value[2] == "em"); + } + + protected function lib_isrem($value) { + return $this->toBool($value[0] == "number" && $value[2] == "rem"); + } + + protected function lib_rgbahex($color) { + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError("color expected for rgbahex"); + } + + return sprintf("#%02x%02x%02x%02x", + isset($color[4]) ? $color[4] * 255 : 255, + $color[1], + $color[2], + $color[3] + ); + } + + protected function lib_argb($color){ + return $this->lib_rgbahex($color); + } + + /** + * Given an url, decide whether to output a regular link or the base64-encoded contents of the file + * + * @param array $value either an argument list (two strings) or a single string + * @return string formatted url(), either as a link or base64-encoded + */ + protected function lib_data_uri($value) { + $mime = ($value[0] === 'list') ? $value[2][0][2] : null; + $url = ($value[0] === 'list') ? $value[2][1][2][0] : $value[2][0]; + + $fullpath = $this->findImport($url); + + if ($fullpath && ($fsize = filesize($fullpath)) !== false) { + // IE8 can't handle data uris larger than 32KB + if ($fsize/1024 < 32) { + if (is_null($mime)) { + if (class_exists('finfo')) { // php 5.3+ + $finfo = new finfo(FILEINFO_MIME); + $mime = explode('; ', $finfo->file($fullpath)); + $mime = $mime[0]; + } elseif (function_exists('mime_content_type')) { // PHP 5.2 + $mime = mime_content_type($fullpath); + } + } + + if (!is_null($mime)) // fallback if the mime type is still unknown + $url = sprintf('data:%s;base64,%s', $mime, base64_encode(file_get_contents($fullpath))); + } + } + + return 'url("'.$url.'")'; + } + + // utility func to unquote a string + protected function lib_e($arg) { + switch ($arg[0]) { + case "list": + $items = $arg[2]; + if (isset($items[0])) { + return $this->lib_e($items[0]); + } + $this->throwError("unrecognised input"); + case "string": + $arg[1] = ""; + return $arg; + case "keyword": + return $arg; + default: + return array("keyword", $this->compileValue($arg)); + } + } + + protected function lib__sprintf($args) { + if ($args[0] != "list") return $args; + $values = $args[2]; + $string = array_shift($values); + $template = $this->compileValue($this->lib_e($string)); + + $i = 0; + if (preg_match_all('/%[dsa]/', $template, $m)) { + foreach ($m[0] as $match) { + $val = isset($values[$i]) ? + $this->reduce($values[$i]) : array('keyword', ''); + + // lessjs compat, renders fully expanded color, not raw color + if ($color = $this->coerceColor($val)) { + $val = $color; + } + + $i++; + $rep = $this->compileValue($this->lib_e($val)); + $template = preg_replace('/'.self::preg_quote($match).'/', + $rep, $template, 1); + } + } + + $d = $string[0] == "string" ? $string[1] : '"'; + return array("string", $d, array($template)); + } + + protected function lib_floor($arg) { + $value = $this->assertNumber($arg); + return array("number", floor($value), $arg[2]); + } + + protected function lib_ceil($arg) { + $value = $this->assertNumber($arg); + return array("number", ceil($value), $arg[2]); + } + + protected function lib_round($arg) { + if ($arg[0] != "list") { + $value = $this->assertNumber($arg); + return array("number", round($value), $arg[2]); + } else { + $value = $this->assertNumber($arg[2][0]); + $precision = $this->assertNumber($arg[2][1]); + return array("number", round($value, $precision), $arg[2][0][2]); + } + } + + protected function lib_unit($arg) { + if ($arg[0] == "list") { + list($number, $newUnit) = $arg[2]; + return array("number", $this->assertNumber($number), + $this->compileValue($this->lib_e($newUnit))); + } else { + return array("number", $this->assertNumber($arg), ""); + } + } + + /** + * Helper function to get arguments for color manipulation functions. + * takes a list that contains a color like thing and a percentage + */ + public function colorArgs($args) { + if ($args[0] != 'list' || count($args[2]) < 2) { + return array(array('color', 0, 0, 0), 0); + } + list($color, $delta) = $args[2]; + $color = $this->assertColor($color); + $delta = floatval($delta[1]); + + return array($color, $delta); + } + + protected function lib_darken($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[3] = $this->clamp($hsl[3] - $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_lighten($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[3] = $this->clamp($hsl[3] + $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_saturate($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[2] = $this->clamp($hsl[2] + $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_desaturate($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[2] = $this->clamp($hsl[2] - $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_spin($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + + $hsl[1] = $hsl[1] + $delta % 360; + if ($hsl[1] < 0) { + $hsl[1] += 360; + } + + return $this->toRGB($hsl); + } + + protected function lib_fadeout($args) { + list($color, $delta) = $this->colorArgs($args); + $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) - $delta/100); + return $color; + } + + protected function lib_fadein($args) { + list($color, $delta) = $this->colorArgs($args); + $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) + $delta/100); + return $color; + } + + protected function lib_hue($color) { + $hsl = $this->toHSL($this->assertColor($color)); + return round($hsl[1]); + } + + protected function lib_saturation($color) { + $hsl = $this->toHSL($this->assertColor($color)); + return round($hsl[2]); + } + + protected function lib_lightness($color) { + $hsl = $this->toHSL($this->assertColor($color)); + return round($hsl[3]); + } + + // get the alpha of a color + // defaults to 1 for non-colors or colors without an alpha + protected function lib_alpha($value) { + if (!is_null($color = $this->coerceColor($value))) { + return isset($color[4]) ? $color[4] : 1; + } + } + + // set the alpha of the color + protected function lib_fade($args) { + list($color, $alpha) = $this->colorArgs($args); + $color[4] = $this->clamp($alpha / 100.0); + return $color; + } + + protected function lib_percentage($arg) { + $num = $this->assertNumber($arg); + return array("number", $num*100, "%"); + } + + /** + * Mix color with white in variable proportion. + * + * It is the same as calling `mix(#ffffff, @color, @weight)`. + * + * tint(@color, [@weight: 50%]); + * + * http://lesscss.org/functions/#color-operations-tint + * + * @return array Color + */ + protected function lib_tint($args) { + $white = ['color', 255, 255, 255]; + if ($args[0] == 'color') { + return $this->lib_mix([ 'list', ',', [$white, $args] ]); + } elseif ($args[0] == "list" && count($args[2]) == 2) { + return $this->lib_mix([ $args[0], $args[1], [$white, $args[2][0], $args[2][1]] ]); + } else { + $this->throwError("tint expects (color, weight)"); + } + } + + /** + * Mix color with black in variable proportion. + * + * It is the same as calling `mix(#000000, @color, @weight)` + * + * shade(@color, [@weight: 50%]); + * + * http://lesscss.org/functions/#color-operations-shade + * + * @return array Color + */ + protected function lib_shade($args) { + $black = ['color', 0, 0, 0]; + if ($args[0] == 'color') { + return $this->lib_mix([ 'list', ',', [$black, $args] ]); + } elseif ($args[0] == "list" && count($args[2]) == 2) { + return $this->lib_mix([ $args[0], $args[1], [$black, $args[2][0], $args[2][1]] ]); + } else { + $this->throwError("shade expects (color, weight)"); + } + } + + // mixes two colors by weight + // mix(@color1, @color2, [@weight: 50%]); + // http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#mix-instance_method + protected function lib_mix($args) { + if ($args[0] != "list" || count($args[2]) < 2) + $this->throwError("mix expects (color1, color2, weight)"); + + list($first, $second) = $args[2]; + $first = $this->assertColor($first); + $second = $this->assertColor($second); + + $first_a = $this->lib_alpha($first); + $second_a = $this->lib_alpha($second); + + if (isset($args[2][2])) { + $weight = $args[2][2][1] / 100.0; + } else { + $weight = 0.5; + } + + $w = $weight * 2 - 1; + $a = $first_a - $second_a; + + $w1 = (($w * $a == -1 ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2.0; + $w2 = 1.0 - $w1; + + $new = array('color', + $w1 * $first[1] + $w2 * $second[1], + $w1 * $first[2] + $w2 * $second[2], + $w1 * $first[3] + $w2 * $second[3], + ); + + if ($first_a != 1.0 || $second_a != 1.0) { + $new[] = $first_a * $weight + $second_a * ($weight - 1); + } + + return $this->fixColor($new); + } + + protected function lib_contrast($args) { + $darkColor = array('color', 0, 0, 0); + $lightColor = array('color', 255, 255, 255); + $threshold = 0.43; + + if ( $args[0] == 'list' ) { + $inputColor = ( isset($args[2][0]) ) ? $this->assertColor($args[2][0]) : $lightColor; + $darkColor = ( isset($args[2][1]) ) ? $this->assertColor($args[2][1]) : $darkColor; + $lightColor = ( isset($args[2][2]) ) ? $this->assertColor($args[2][2]) : $lightColor; + $threshold = ( isset($args[2][3]) ) ? $this->assertNumber($args[2][3]) : $threshold; + } + else { + $inputColor = $this->assertColor($args); + } + + $inputColor = $this->coerceColor($inputColor); + $darkColor = $this->coerceColor($darkColor); + $lightColor = $this->coerceColor($lightColor); + + //Figure out which is actually light and dark! + if ( $this->toLuma($darkColor) > $this->toLuma($lightColor) ) { + $t = $lightColor; + $lightColor = $darkColor; + $darkColor = $t; + } + + $inputColor_alpha = $this->lib_alpha($inputColor); + if ( ( $this->toLuma($inputColor) * $inputColor_alpha) < $threshold) { + return $lightColor; + } + return $darkColor; + } + + private function toLuma($color) { + list(, $r, $g, $b) = $this->coerceColor($color); + + $r = $r / 255; + $g = $g / 255; + $b = $b / 255; + + $r = ($r <= 0.03928) ? $r / 12.92 : pow((($r + 0.055) / 1.055), 2.4); + $g = ($g <= 0.03928) ? $g / 12.92 : pow((($g + 0.055) / 1.055), 2.4); + $b = ($b <= 0.03928) ? $b / 12.92 : pow((($b + 0.055) / 1.055), 2.4); + + return (0.2126 * $r) + (0.7152 * $g) + (0.0722 * $b); + } + + protected function lib_luma($color) { + return array("number", round($this->toLuma($color) * 100, 8), "%"); + } + + + public function assertColor($value, $error = "expected color value") { + $color = $this->coerceColor($value); + if (is_null($color)) $this->throwError($error); + return $color; + } + + public function assertNumber($value, $error = "expecting number") { + if ($value[0] == "number") return $value[1]; + $this->throwError($error); + } + + public function assertArgs($value, $expectedArgs, $name="") { + if ($expectedArgs == 1) { + return $value; + } else { + if ($value[0] !== "list" || $value[1] != ",") $this->throwError("expecting list"); + $values = $value[2]; + $numValues = count($values); + if ($expectedArgs != $numValues) { + if ($name) { + $name = $name . ": "; + } + + $this->throwError("${name}expecting $expectedArgs arguments, got $numValues"); + } + + return $values; + } + } + + protected function toHSL($color) { + if ($color[0] === 'hsl') { + return $color; + } + + $r = $color[1] / 255; + $g = $color[2] / 255; + $b = $color[3] / 255; + + $min = min($r, $g, $b); + $max = max($r, $g, $b); + + $L = ($min + $max) / 2; + if ($min == $max) { + $S = $H = 0; + } else { + if ($L < 0.5) { + $S = ($max - $min) / ($max + $min); + } else { + $S = ($max - $min) / (2.0 - $max - $min); + } + if ($r == $max) { + $H = ($g - $b) / ($max - $min); + } elseif ($g == $max) { + $H = 2.0 + ($b - $r) / ($max - $min); + } elseif ($b == $max) { + $H = 4.0 + ($r - $g) / ($max - $min); + } + + } + + $out = array('hsl', + ($H < 0 ? $H + 6 : $H)*60, + $S * 100, + $L * 100, + ); + + if (count($color) > 4) { + // copy alpha + $out[] = $color[4]; + } + return $out; + } + + protected function toRGB_helper($comp, $temp1, $temp2) { + if ($comp < 0) { + $comp += 1.0; + } elseif ($comp > 1) { + $comp -= 1.0; + } + + if (6 * $comp < 1) { + return $temp1 + ($temp2 - $temp1) * 6 * $comp; + } + if (2 * $comp < 1) { + return $temp2; + } + if (3 * $comp < 2) { + return $temp1 + ($temp2 - $temp1)*((2/3) - $comp) * 6; + } + + return $temp1; + } + + /** + * Converts a hsl array into a color value in rgb. + * Expects H to be in range of 0 to 360, S and L in 0 to 100 + */ + protected function toRGB($color) { + if ($color[0] === 'color') { + return $color; + } + + $H = $color[1] / 360; + $S = $color[2] / 100; + $L = $color[3] / 100; + + if ($S == 0) { + $r = $g = $b = $L; + } else { + $temp2 = $L < 0.5 ? + $L * (1.0 + $S) : + $L + $S - $L * $S; + + $temp1 = 2.0 * $L - $temp2; + + $r = $this->toRGB_helper($H + 1/3, $temp1, $temp2); + $g = $this->toRGB_helper($H, $temp1, $temp2); + $b = $this->toRGB_helper($H - 1/3, $temp1, $temp2); + } + + // $out = array('color', round($r*255), round($g*255), round($b*255)); + $out = array('color', $r*255, $g*255, $b*255); + if (count($color) > 4) { + // copy alpha + $out[] = $color[4]; + } + return $out; + } + + protected function clamp($v, $max = 1, $min = 0) { + return min($max, max($min, $v)); + } + + /** + * Convert the rgb, rgba, hsl color literals of function type + * as returned by the parser into values of color type. + */ + protected function funcToColor($func) { + $fname = $func[1]; + if ($func[2][0] != 'list') { + // need a list of arguments + return false; + } + $rawComponents = $func[2][2]; + + if ($fname == 'hsl' || $fname == 'hsla') { + $hsl = array('hsl'); + $i = 0; + foreach ($rawComponents as $c) { + $val = $this->reduce($c); + $val = isset($val[1]) ? floatval($val[1]) : 0; + + if ($i == 0) { + $clamp = 360; + } elseif ($i < 3) { + $clamp = 100; + } else { + $clamp = 1; + } + + $hsl[] = $this->clamp($val, $clamp); + $i++; + } + + while (count($hsl) < 4) { + $hsl[] = 0; + } + return $this->toRGB($hsl); + + } elseif ($fname == 'rgb' || $fname == 'rgba') { + $components = array(); + $i = 1; + foreach ($rawComponents as $c) { + $c = $this->reduce($c); + if ($i < 4) { + if ($c[0] == "number" && $c[2] == "%") { + $components[] = 255 * ($c[1] / 100); + } else { + $components[] = floatval($c[1]); + } + } elseif ($i == 4) { + if ($c[0] == "number" && $c[2] == "%") { + $components[] = 1.0 * ($c[1] / 100); + } else { + $components[] = floatval($c[1]); + } + } else break; + + $i++; + } + while (count($components) < 3) { + $components[] = 0; + } + array_unshift($components, 'color'); + return $this->fixColor($components); + } + + return false; + } + + protected function reduce($value, $forExpression = false) { + switch ($value[0]) { + case "interpolate": + $reduced = $this->reduce($value[1]); + $var = $this->compileValue($reduced); + $res = $this->reduce(array("variable", $this->vPrefix . $var)); + + if ($res[0] == "raw_color") { + $res = $this->coerceColor($res); + } + + if (empty($value[2])) $res = $this->lib_e($res); + + return $res; + case "variable": + $key = $value[1]; + if (is_array($key)) { + $key = $this->reduce($key); + $key = $this->vPrefix . $this->compileValue($this->lib_e($key)); + } + + $seen =& $this->env->seenNames; + + if (!empty($seen[$key])) { + $this->throwError("infinite loop detected: $key"); + } + + $seen[$key] = true; + $out = $this->reduce($this->get($key)); + $seen[$key] = false; + return $out; + case "list": + foreach ($value[2] as &$item) { + $item = $this->reduce($item, $forExpression); + } + return $value; + case "expression": + return $this->evaluate($value); + case "string": + foreach ($value[2] as &$part) { + if (is_array($part)) { + $strip = $part[0] == "variable"; + $part = $this->reduce($part); + if ($strip) $part = $this->lib_e($part); + } + } + return $value; + case "escape": + list(,$inner) = $value; + return $this->lib_e($this->reduce($inner)); + case "function": + $color = $this->funcToColor($value); + if ($color) return $color; + + list(, $name, $args) = $value; + if ($name == "%") $name = "_sprintf"; + + $f = isset($this->libFunctions[$name]) ? + $this->libFunctions[$name] : array($this, 'lib_'.str_replace('-', '_', $name)); + + if (is_callable($f)) { + if ($args[0] == 'list') + $args = self::compressList($args[2], $args[1]); + + $ret = call_user_func($f, $this->reduce($args, true), $this); + + if (is_null($ret)) { + return array("string", "", array( + $name, "(", $args, ")" + )); + } + + // convert to a typed value if the result is a php primitive + if (is_numeric($ret)) { + $ret = array('number', $ret, ""); + } elseif (!is_array($ret)) { + $ret = array('keyword', $ret); + } + + return $ret; + } + + // plain function, reduce args + $value[2] = $this->reduce($value[2]); + return $value; + case "unary": + list(, $op, $exp) = $value; + $exp = $this->reduce($exp); + + if ($exp[0] == "number") { + switch ($op) { + case "+": + return $exp; + case "-": + $exp[1] *= -1; + return $exp; + } + } + return array("string", "", array($op, $exp)); + } + + if ($forExpression) { + switch ($value[0]) { + case "keyword": + if ($color = $this->coerceColor($value)) { + return $color; + } + break; + case "raw_color": + return $this->coerceColor($value); + } + } + + return $value; + } + + + // coerce a value for use in color operation + protected function coerceColor($value) { + switch ($value[0]) { + case 'color': return $value; + case 'raw_color': + $c = array("color", 0, 0, 0); + $colorStr = substr($value[1], 1); + $num = hexdec($colorStr); + $width = strlen($colorStr) == 3 ? 16 : 256; + + for ($i = 3; $i > 0; $i--) { // 3 2 1 + $t = $num % $width; + $num /= $width; + + $c[$i] = $t * (256/$width) + $t * floor(16/$width); + } + + return $c; + case 'keyword': + $name = $value[1]; + if (isset(self::$cssColors[$name])) { + $rgba = explode(',', self::$cssColors[$name]); + + if (isset($rgba[3])) { + return array('color', $rgba[0], $rgba[1], $rgba[2], $rgba[3]); + } + return array('color', $rgba[0], $rgba[1], $rgba[2]); + } + return null; + } + } + + // make something string like into a string + protected function coerceString($value) { + switch ($value[0]) { + case "string": + return $value; + case "keyword": + return array("string", "", array($value[1])); + } + return null; + } + + // turn list of length 1 into value type + protected function flattenList($value) { + if ($value[0] == "list" && count($value[2]) == 1) { + return $this->flattenList($value[2][0]); + } + return $value; + } + + public function toBool($a) { + return $a ? self::$TRUE : self::$FALSE; + } + + // evaluate an expression + protected function evaluate($exp) { + list(, $op, $left, $right, $whiteBefore, $whiteAfter) = $exp; + + $left = $this->reduce($left, true); + $right = $this->reduce($right, true); + + if ($leftColor = $this->coerceColor($left)) { + $left = $leftColor; + } + + if ($rightColor = $this->coerceColor($right)) { + $right = $rightColor; + } + + $ltype = $left[0]; + $rtype = $right[0]; + + // operators that work on all types + if ($op == "and") { + return $this->toBool($left == self::$TRUE && $right == self::$TRUE); + } + + if ($op == "=") { + return $this->toBool($this->eq($left, $right) ); + } + + if ($op == "+" && !is_null($str = $this->stringConcatenate($left, $right))) { + return $str; + } + + // type based operators + $fname = "op_${ltype}_${rtype}"; + if (is_callable(array($this, $fname))) { + $out = $this->$fname($op, $left, $right); + if (!is_null($out)) return $out; + } + + // make the expression look it did before being parsed + $paddedOp = $op; + if ($whiteBefore) { + $paddedOp = " " . $paddedOp; + } + if ($whiteAfter) { + $paddedOp .= " "; + } + + return array("string", "", array($left, $paddedOp, $right)); + } + + protected function stringConcatenate($left, $right) { + if ($strLeft = $this->coerceString($left)) { + if ($right[0] == "string") { + $right[1] = ""; + } + $strLeft[2][] = $right; + return $strLeft; + } + + if ($strRight = $this->coerceString($right)) { + array_unshift($strRight[2], $left); + return $strRight; + } + } + + + // make sure a color's components don't go out of bounds + protected function fixColor($c) { + foreach (range(1, 3) as $i) { + if ($c[$i] < 0) $c[$i] = 0; + if ($c[$i] > 255) $c[$i] = 255; + } + + return $c; + } + + protected function op_number_color($op, $lft, $rgt) { + if ($op == '+' || $op == '*') { + return $this->op_color_number($op, $rgt, $lft); + } + } + + protected function op_color_number($op, $lft, $rgt) { + if ($rgt[0] == '%') $rgt[1] /= 100; + + return $this->op_color_color($op, $lft, + array_fill(1, count($lft) - 1, $rgt[1])); + } + + protected function op_color_color($op, $left, $right) { + $out = array('color'); + $max = count($left) > count($right) ? count($left) : count($right); + foreach (range(1, $max - 1) as $i) { + $lval = isset($left[$i]) ? $left[$i] : 0; + $rval = isset($right[$i]) ? $right[$i] : 0; + switch ($op) { + case '+': + $out[] = $lval + $rval; + break; + case '-': + $out[] = $lval - $rval; + break; + case '*': + $out[] = $lval * $rval; + break; + case '%': + $out[] = $lval % $rval; + break; + case '/': + if ($rval == 0) { + $this->throwError("evaluate error: can't divide by zero"); + } + $out[] = $lval / $rval; + break; + default: + $this->throwError('evaluate error: color op number failed on op '.$op); + } + } + return $this->fixColor($out); + } + + public function lib_red($color){ + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError('color expected for red()'); + } + + return $color[1]; + } + + public function lib_green($color){ + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError('color expected for green()'); + } + + return $color[2]; + } + + public function lib_blue($color){ + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError('color expected for blue()'); + } + + return $color[3]; + } + + + // operator on two numbers + protected function op_number_number($op, $left, $right) { + $unit = empty($left[2]) ? $right[2] : $left[2]; + + $value = 0; + switch ($op) { + case '+': + $value = $left[1] + $right[1]; + break; + case '*': + $value = $left[1] * $right[1]; + break; + case '-': + $value = $left[1] - $right[1]; + break; + case '%': + $value = $left[1] % $right[1]; + break; + case '/': + if ($right[1] == 0) $this->throwError('parse error: divide by zero'); + $value = $left[1] / $right[1]; + break; + case '<': + return $this->toBool($left[1] < $right[1]); + case '>': + return $this->toBool($left[1] > $right[1]); + case '>=': + return $this->toBool($left[1] >= $right[1]); + case '=<': + return $this->toBool($left[1] <= $right[1]); + default: + $this->throwError('parse error: unknown number operator: '.$op); + } + + return array("number", $value, $unit); + } + + + /* environment functions */ + + protected function makeOutputBlock($type, $selectors = null) { + $b = new stdclass; + $b->lines = array(); + $b->children = array(); + $b->selectors = $selectors; + $b->type = $type; + $b->parent = $this->scope; + return $b; + } + + // the state of execution + protected function pushEnv($block = null) { + $e = new stdclass; + $e->parent = $this->env; + $e->store = array(); + $e->block = $block; + + $this->env = $e; + return $e; + } + + // pop something off the stack + protected function popEnv() { + $old = $this->env; + $this->env = $this->env->parent; + return $old; + } + + // set something in the current env + protected function set($name, $value) { + $this->env->store[$name] = $value; + } + + + // get the highest occurrence entry for a name + protected function get($name) { + $current = $this->env; + + $isArguments = $name == $this->vPrefix . 'arguments'; + while ($current) { + if ($isArguments && isset($current->arguments)) { + return array('list', ' ', $current->arguments); + } + + if (isset($current->store[$name])) { + return $current->store[$name]; + } + + $current = isset($current->storeParent) ? + $current->storeParent : + $current->parent; + } + + $this->throwError("variable $name is undefined"); + } + + // inject array of unparsed strings into environment as variables + protected function injectVariables($args) { + $this->pushEnv(); + $parser = new lessc_parser($this, __METHOD__); + foreach ($args as $name => $strValue) { + if ($name{0} !== '@') { + $name = '@' . $name; + } + $parser->count = 0; + $parser->buffer = (string)$strValue; + if (!$parser->propertyValue($value)) { + throw new Exception("failed to parse passed in variable $name: $strValue"); + } + + $this->set($name, $value); + } + } + + /** + * Initialize any static state, can initialize parser for a file + * $opts isn't used yet + */ + public function __construct($fname = null) { + if ($fname !== null) { + // used for deprecated parse method + $this->_parseFile = $fname; + } + } + + public function compile($string, $name = null) { + $locale = setlocale(LC_NUMERIC, 0); + setlocale(LC_NUMERIC, "C"); + + $this->parser = $this->makeParser($name); + $root = $this->parser->parse($string); + + $this->env = null; + $this->scope = null; + + $this->formatter = $this->newFormatter(); + + if (!empty($this->registeredVars)) { + $this->injectVariables($this->registeredVars); + } + + $this->sourceParser = $this->parser; // used for error messages + $this->compileBlock($root); + + ob_start(); + $this->formatter->block($this->scope); + $out = ob_get_clean(); + setlocale(LC_NUMERIC, $locale); + return $out; + } + + public function compileFile($fname, $outFname = null) { + if (!is_readable($fname)) { + throw new Exception('load error: failed to find '.$fname); + } + + $pi = pathinfo($fname); + + $oldImport = $this->importDir; + + $this->importDir = (array)$this->importDir; + $this->importDir[] = $pi['dirname'].'/'; + + $this->addParsedFile($fname); + + $out = $this->compile(file_get_contents($fname), $fname); + + $this->importDir = $oldImport; + + if ($outFname !== null) { + return file_put_contents($outFname, $out); + } + + return $out; + } + + // compile only if changed input has changed or output doesn't exist + public function checkedCompile($in, $out) { + if (!is_file($out) || filemtime($in) > filemtime($out)) { + $this->compileFile($in, $out); + return true; + } + return false; + } + + /** + * Execute lessphp on a .less file or a lessphp cache structure + * + * The lessphp cache structure contains information about a specific + * less file having been parsed. It can be used as a hint for future + * calls to determine whether or not a rebuild is required. + * + * The cache structure contains two important keys that may be used + * externally: + * + * compiled: The final compiled CSS + * updated: The time (in seconds) the CSS was last compiled + * + * The cache structure is a plain-ol' PHP associative array and can + * be serialized and unserialized without a hitch. + * + * @param mixed $in Input + * @param bool $force Force rebuild? + * @return array lessphp cache structure + */ + public function cachedCompile($in, $force = false) { + // assume no root + $root = null; + + if (is_string($in)) { + $root = $in; + } elseif (is_array($in) && isset($in['root'])) { + if ($force || !isset($in['files'])) { + // If we are forcing a recompile or if for some reason the + // structure does not contain any file information we should + // specify the root to trigger a rebuild. + $root = $in['root']; + } elseif (isset($in['files']) && is_array($in['files'])) { + foreach ($in['files'] as $fname => $ftime) { + if (!file_exists($fname) || filemtime($fname) > $ftime) { + // One of the files we knew about previously has changed + // so we should look at our incoming root again. + $root = $in['root']; + break; + } + } + } + } else { + // TODO: Throw an exception? We got neither a string nor something + // that looks like a compatible lessphp cache structure. + return null; + } + + if ($root !== null) { + // If we have a root value which means we should rebuild. + $out = array(); + $out['root'] = $root; + $out['compiled'] = $this->compileFile($root); + $out['files'] = $this->allParsedFiles(); + $out['updated'] = time(); + return $out; + } else { + // No changes, pass back the structure + // we were given initially. + return $in; + } + + } + + // parse and compile buffer + // This is deprecated + public function parse($str = null, $initialVariables = null) { + if (is_array($str)) { + $initialVariables = $str; + $str = null; + } + + $oldVars = $this->registeredVars; + if ($initialVariables !== null) { + $this->setVariables($initialVariables); + } + + if ($str == null) { + if (empty($this->_parseFile)) { + throw new exception("nothing to parse"); + } + + $out = $this->compileFile($this->_parseFile); + } else { + $out = $this->compile($str); + } + + $this->registeredVars = $oldVars; + return $out; + } + + protected function makeParser($name) { + $parser = new lessc_parser($this, $name); + $parser->writeComments = $this->preserveComments; + + return $parser; + } + + public function setFormatter($name) { + $this->formatterName = $name; + } + + protected function newFormatter() { + $className = "lessc_formatter_lessjs"; + if (!empty($this->formatterName)) { + if (!is_string($this->formatterName)) + return $this->formatterName; + $className = "lessc_formatter_$this->formatterName"; + } + + return new $className; + } + + public function setPreserveComments($preserve) { + $this->preserveComments = $preserve; + } + + public function registerFunction($name, $func) { + $this->libFunctions[$name] = $func; + } + + public function unregisterFunction($name) { + unset($this->libFunctions[$name]); + } + + public function setVariables($variables) { + $this->registeredVars = array_merge($this->registeredVars, $variables); + } + + public function unsetVariable($name) { + unset($this->registeredVars[$name]); + } + + public function setImportDir($dirs) { + $this->importDir = (array)$dirs; + } + + public function addImportDir($dir) { + $this->importDir = (array)$this->importDir; + $this->importDir[] = $dir; + } + + public function allParsedFiles() { + return $this->allParsedFiles; + } + + public function addParsedFile($file) { + $this->allParsedFiles[realpath($file)] = filemtime($file); + } + + /** + * Uses the current value of $this->count to show line and line number + */ + public function throwError($msg = null) { + if ($this->sourceLoc >= 0) { + $this->sourceParser->throwError($msg, $this->sourceLoc); + } + throw new exception($msg); + } + + // compile file $in to file $out if $in is newer than $out + // returns true when it compiles, false otherwise + public static function ccompile($in, $out, $less = null) { + if ($less === null) { + $less = new self; + } + return $less->checkedCompile($in, $out); + } + + public static function cexecute($in, $force = false, $less = null) { + if ($less === null) { + $less = new self; + } + return $less->cachedCompile($in, $force); + } + + static protected $cssColors = array( + 'aliceblue' => '240,248,255', + 'antiquewhite' => '250,235,215', + 'aqua' => '0,255,255', + 'aquamarine' => '127,255,212', + 'azure' => '240,255,255', + 'beige' => '245,245,220', + 'bisque' => '255,228,196', + 'black' => '0,0,0', + 'blanchedalmond' => '255,235,205', + 'blue' => '0,0,255', + 'blueviolet' => '138,43,226', + 'brown' => '165,42,42', + 'burlywood' => '222,184,135', + 'cadetblue' => '95,158,160', + 'chartreuse' => '127,255,0', + 'chocolate' => '210,105,30', + 'coral' => '255,127,80', + 'cornflowerblue' => '100,149,237', + 'cornsilk' => '255,248,220', + 'crimson' => '220,20,60', + 'cyan' => '0,255,255', + 'darkblue' => '0,0,139', + 'darkcyan' => '0,139,139', + 'darkgoldenrod' => '184,134,11', + 'darkgray' => '169,169,169', + 'darkgreen' => '0,100,0', + 'darkgrey' => '169,169,169', + 'darkkhaki' => '189,183,107', + 'darkmagenta' => '139,0,139', + 'darkolivegreen' => '85,107,47', + 'darkorange' => '255,140,0', + 'darkorchid' => '153,50,204', + 'darkred' => '139,0,0', + 'darksalmon' => '233,150,122', + 'darkseagreen' => '143,188,143', + 'darkslateblue' => '72,61,139', + 'darkslategray' => '47,79,79', + 'darkslategrey' => '47,79,79', + 'darkturquoise' => '0,206,209', + 'darkviolet' => '148,0,211', + 'deeppink' => '255,20,147', + 'deepskyblue' => '0,191,255', + 'dimgray' => '105,105,105', + 'dimgrey' => '105,105,105', + 'dodgerblue' => '30,144,255', + 'firebrick' => '178,34,34', + 'floralwhite' => '255,250,240', + 'forestgreen' => '34,139,34', + 'fuchsia' => '255,0,255', + 'gainsboro' => '220,220,220', + 'ghostwhite' => '248,248,255', + 'gold' => '255,215,0', + 'goldenrod' => '218,165,32', + 'gray' => '128,128,128', + 'green' => '0,128,0', + 'greenyellow' => '173,255,47', + 'grey' => '128,128,128', + 'honeydew' => '240,255,240', + 'hotpink' => '255,105,180', + 'indianred' => '205,92,92', + 'indigo' => '75,0,130', + 'ivory' => '255,255,240', + 'khaki' => '240,230,140', + 'lavender' => '230,230,250', + 'lavenderblush' => '255,240,245', + 'lawngreen' => '124,252,0', + 'lemonchiffon' => '255,250,205', + 'lightblue' => '173,216,230', + 'lightcoral' => '240,128,128', + 'lightcyan' => '224,255,255', + 'lightgoldenrodyellow' => '250,250,210', + 'lightgray' => '211,211,211', + 'lightgreen' => '144,238,144', + 'lightgrey' => '211,211,211', + 'lightpink' => '255,182,193', + 'lightsalmon' => '255,160,122', + 'lightseagreen' => '32,178,170', + 'lightskyblue' => '135,206,250', + 'lightslategray' => '119,136,153', + 'lightslategrey' => '119,136,153', + 'lightsteelblue' => '176,196,222', + 'lightyellow' => '255,255,224', + 'lime' => '0,255,0', + 'limegreen' => '50,205,50', + 'linen' => '250,240,230', + 'magenta' => '255,0,255', + 'maroon' => '128,0,0', + 'mediumaquamarine' => '102,205,170', + 'mediumblue' => '0,0,205', + 'mediumorchid' => '186,85,211', + 'mediumpurple' => '147,112,219', + 'mediumseagreen' => '60,179,113', + 'mediumslateblue' => '123,104,238', + 'mediumspringgreen' => '0,250,154', + 'mediumturquoise' => '72,209,204', + 'mediumvioletred' => '199,21,133', + 'midnightblue' => '25,25,112', + 'mintcream' => '245,255,250', + 'mistyrose' => '255,228,225', + 'moccasin' => '255,228,181', + 'navajowhite' => '255,222,173', + 'navy' => '0,0,128', + 'oldlace' => '253,245,230', + 'olive' => '128,128,0', + 'olivedrab' => '107,142,35', + 'orange' => '255,165,0', + 'orangered' => '255,69,0', + 'orchid' => '218,112,214', + 'palegoldenrod' => '238,232,170', + 'palegreen' => '152,251,152', + 'paleturquoise' => '175,238,238', + 'palevioletred' => '219,112,147', + 'papayawhip' => '255,239,213', + 'peachpuff' => '255,218,185', + 'peru' => '205,133,63', + 'pink' => '255,192,203', + 'plum' => '221,160,221', + 'powderblue' => '176,224,230', + 'purple' => '128,0,128', + 'red' => '255,0,0', + 'rosybrown' => '188,143,143', + 'royalblue' => '65,105,225', + 'saddlebrown' => '139,69,19', + 'salmon' => '250,128,114', + 'sandybrown' => '244,164,96', + 'seagreen' => '46,139,87', + 'seashell' => '255,245,238', + 'sienna' => '160,82,45', + 'silver' => '192,192,192', + 'skyblue' => '135,206,235', + 'slateblue' => '106,90,205', + 'slategray' => '112,128,144', + 'slategrey' => '112,128,144', + 'snow' => '255,250,250', + 'springgreen' => '0,255,127', + 'steelblue' => '70,130,180', + 'tan' => '210,180,140', + 'teal' => '0,128,128', + 'thistle' => '216,191,216', + 'tomato' => '255,99,71', + 'transparent' => '0,0,0,0', + 'turquoise' => '64,224,208', + 'violet' => '238,130,238', + 'wheat' => '245,222,179', + 'white' => '255,255,255', + 'whitesmoke' => '245,245,245', + 'yellow' => '255,255,0', + 'yellowgreen' => '154,205,50' + ); +} + +// responsible for taking a string of LESS code and converting it into a +// syntax tree +class lessc_parser { + static protected $nextBlockId = 0; // used to uniquely identify blocks + + static protected $precedence = array( + '=<' => 0, + '>=' => 0, + '=' => 0, + '<' => 0, + '>' => 0, + + '+' => 1, + '-' => 1, + '*' => 2, + '/' => 2, + '%' => 2, + ); + + static protected $whitePattern; + static protected $commentMulti; + + static protected $commentSingle = "//"; + static protected $commentMultiLeft = "/*"; + static protected $commentMultiRight = "*/"; + + // regex string to match any of the operators + static protected $operatorString; + + // these properties will supress division unless it's inside parenthases + static protected $supressDivisionProps = + array('/border-radius$/i', '/^font$/i'); + + protected $blockDirectives = array("font-face", "keyframes", "page", "-moz-document", "viewport", "-moz-viewport", "-o-viewport", "-ms-viewport"); + protected $lineDirectives = array("charset"); + + /** + * if we are in parens we can be more liberal with whitespace around + * operators because it must evaluate to a single value and thus is less + * ambiguous. + * + * Consider: + * property1: 10 -5; // is two numbers, 10 and -5 + * property2: (10 -5); // should evaluate to 5 + */ + protected $inParens = false; + + // caches preg escaped literals + static protected $literalCache = array(); + + public function __construct($lessc, $sourceName = null) { + $this->eatWhiteDefault = true; + // reference to less needed for vPrefix, mPrefix, and parentSelector + $this->lessc = $lessc; + + $this->sourceName = $sourceName; // name used for error messages + + $this->writeComments = false; + + if (!self::$operatorString) { + self::$operatorString = + '('.implode('|', array_map(array('lessc', 'preg_quote'), + array_keys(self::$precedence))).')'; + + $commentSingle = lessc::preg_quote(self::$commentSingle); + $commentMultiLeft = lessc::preg_quote(self::$commentMultiLeft); + $commentMultiRight = lessc::preg_quote(self::$commentMultiRight); + + self::$commentMulti = $commentMultiLeft.'.*?'.$commentMultiRight; + self::$whitePattern = '/'.$commentSingle.'[^\n]*\s*|('.self::$commentMulti.')\s*|\s+/Ais'; + } + } + + public function parse($buffer) { + $this->count = 0; + $this->line = 1; + + $this->env = null; // block stack + $this->buffer = $this->writeComments ? $buffer : $this->removeComments($buffer); + $this->pushSpecialBlock("root"); + $this->eatWhiteDefault = true; + $this->seenComments = array(); + + // trim whitespace on head + // if (preg_match('/^\s+/', $this->buffer, $m)) { + // $this->line += substr_count($m[0], "\n"); + // $this->buffer = ltrim($this->buffer); + // } + $this->whitespace(); + + // parse the entire file + while (false !== $this->parseChunk()); + + if ($this->count != strlen($this->buffer)) + $this->throwError(); + + // TODO report where the block was opened + if ( !property_exists($this->env, 'parent') || !is_null($this->env->parent) ) + throw new exception('parse error: unclosed block'); + + return $this->env; + } + + /** + * Parse a single chunk off the head of the buffer and append it to the + * current parse environment. + * Returns false when the buffer is empty, or when there is an error. + * + * This function is called repeatedly until the entire document is + * parsed. + * + * This parser is most similar to a recursive descent parser. Single + * functions represent discrete grammatical rules for the language, and + * they are able to capture the text that represents those rules. + * + * Consider the function lessc::keyword(). (all parse functions are + * structured the same) + * + * The function takes a single reference argument. When calling the + * function it will attempt to match a keyword on the head of the buffer. + * If it is successful, it will place the keyword in the referenced + * argument, advance the position in the buffer, and return true. If it + * fails then it won't advance the buffer and it will return false. + * + * All of these parse functions are powered by lessc::match(), which behaves + * the same way, but takes a literal regular expression. Sometimes it is + * more convenient to use match instead of creating a new function. + * + * Because of the format of the functions, to parse an entire string of + * grammatical rules, you can chain them together using &&. + * + * But, if some of the rules in the chain succeed before one fails, then + * the buffer position will be left at an invalid state. In order to + * avoid this, lessc::seek() is used to remember and set buffer positions. + * + * Before parsing a chain, use $s = $this->seek() to remember the current + * position into $s. Then if a chain fails, use $this->seek($s) to + * go back where we started. + */ + protected function parseChunk() { + if (empty($this->buffer)) return false; + $s = $this->seek(); + + if ($this->whitespace()) { + return true; + } + + // setting a property + if ($this->keyword($key) && $this->assign() && + $this->propertyValue($value, $key) && $this->end() + ) { + $this->append(array('assign', $key, $value), $s); + return true; + } else { + $this->seek($s); + } + + + // look for special css blocks + if ($this->literal('@', false)) { + $this->count--; + + // media + if ($this->literal('@media')) { + if (($this->mediaQueryList($mediaQueries) || true) + && $this->literal('{') + ) { + $media = $this->pushSpecialBlock("media"); + $media->queries = is_null($mediaQueries) ? array() : $mediaQueries; + return true; + } else { + $this->seek($s); + return false; + } + } + + if ($this->literal("@", false) && $this->keyword($dirName)) { + if ($this->isDirective($dirName, $this->blockDirectives)) { + if (($this->openString("{", $dirValue, null, array(";")) || true) && + $this->literal("{") + ) { + $dir = $this->pushSpecialBlock("directive"); + $dir->name = $dirName; + if (isset($dirValue)) $dir->value = $dirValue; + return true; + } + } elseif ($this->isDirective($dirName, $this->lineDirectives)) { + if ($this->propertyValue($dirValue) && $this->end()) { + $this->append(array("directive", $dirName, $dirValue)); + return true; + } + } + } + + $this->seek($s); + } + + // setting a variable + if ($this->variable($var) && $this->assign() && + $this->propertyValue($value) && $this->end() + ) { + $this->append(array('assign', $var, $value), $s); + return true; + } else { + $this->seek($s); + } + + if ($this->import($importValue)) { + $this->append($importValue, $s); + return true; + } + + // opening parametric mixin + if ($this->tag($tag, true) && $this->argumentDef($args, $isVararg) && + ($this->guards($guards) || true) && + $this->literal('{') + ) { + $block = $this->pushBlock($this->fixTags(array($tag))); + $block->args = $args; + $block->isVararg = $isVararg; + if (!empty($guards)) $block->guards = $guards; + return true; + } else { + $this->seek($s); + } + + // opening a simple block + if ($this->tags($tags) && $this->literal('{', false)) { + $tags = $this->fixTags($tags); + $this->pushBlock($tags); + return true; + } else { + $this->seek($s); + } + + // closing a block + if ($this->literal('}', false)) { + try { + $block = $this->pop(); + } catch (exception $e) { + $this->seek($s); + $this->throwError($e->getMessage()); + } + + $hidden = false; + if (is_null($block->type)) { + $hidden = true; + if (!isset($block->args)) { + foreach ($block->tags as $tag) { + if (!is_string($tag) || $tag{0} != $this->lessc->mPrefix) { + $hidden = false; + break; + } + } + } + + foreach ($block->tags as $tag) { + if (is_string($tag)) { + $this->env->children[$tag][] = $block; + } + } + } + + if (!$hidden) { + $this->append(array('block', $block), $s); + } + + // this is done here so comments aren't bundled into he block that + // was just closed + $this->whitespace(); + return true; + } + + // mixin + if ($this->mixinTags($tags) && + ($this->argumentDef($argv, $isVararg) || true) && + ($this->keyword($suffix) || true) && $this->end() + ) { + $tags = $this->fixTags($tags); + $this->append(array('mixin', $tags, $argv, $suffix), $s); + return true; + } else { + $this->seek($s); + } + + // spare ; + if ($this->literal(';')) return true; + + return false; // got nothing, throw error + } + + protected function isDirective($dirname, $directives) { + // TODO: cache pattern in parser + $pattern = implode("|", + array_map(array("lessc", "preg_quote"), $directives)); + $pattern = '/^(-[a-z-]+-)?(' . $pattern . ')$/i'; + + return preg_match($pattern, $dirname); + } + + protected function fixTags($tags) { + // move @ tags out of variable namespace + foreach ($tags as &$tag) { + if ($tag{0} == $this->lessc->vPrefix) + $tag[0] = $this->lessc->mPrefix; + } + return $tags; + } + + // a list of expressions + protected function expressionList(&$exps) { + $values = array(); + + while ($this->expression($exp)) { + $values[] = $exp; + } + + if (count($values) == 0) return false; + + $exps = lessc::compressList($values, ' '); + return true; + } + + /** + * Attempt to consume an expression. + * @link http://en.wikipedia.org/wiki/Operator-precedence_parser#Pseudo-code + */ + protected function expression(&$out) { + if ($this->value($lhs)) { + $out = $this->expHelper($lhs, 0); + + // look for / shorthand + if (!empty($this->env->supressedDivision)) { + unset($this->env->supressedDivision); + $s = $this->seek(); + if ($this->literal("/") && $this->value($rhs)) { + $out = array("list", "", + array($out, array("keyword", "/"), $rhs)); + } else { + $this->seek($s); + } + } + + return true; + } + return false; + } + + /** + * recursively parse infix equation with $lhs at precedence $minP + */ + protected function expHelper($lhs, $minP) { + $this->inExp = true; + $ss = $this->seek(); + + while (true) { + $whiteBefore = isset($this->buffer[$this->count - 1]) && + ctype_space($this->buffer[$this->count - 1]); + + // If there is whitespace before the operator, then we require + // whitespace after the operator for it to be an expression + $needWhite = $whiteBefore && !$this->inParens; + + if ($this->match(self::$operatorString.($needWhite ? '\s' : ''), $m) && self::$precedence[$m[1]] >= $minP) { + if (!$this->inParens && isset($this->env->currentProperty) && $m[1] == "/" && empty($this->env->supressedDivision)) { + foreach (self::$supressDivisionProps as $pattern) { + if (preg_match($pattern, $this->env->currentProperty)) { + $this->env->supressedDivision = true; + break 2; + } + } + } + + + $whiteAfter = isset($this->buffer[$this->count - 1]) && + ctype_space($this->buffer[$this->count - 1]); + + if (!$this->value($rhs)) break; + + // peek for next operator to see what to do with rhs + if ($this->peek(self::$operatorString, $next) && self::$precedence[$next[1]] > self::$precedence[$m[1]]) { + $rhs = $this->expHelper($rhs, self::$precedence[$next[1]]); + } + + $lhs = array('expression', $m[1], $lhs, $rhs, $whiteBefore, $whiteAfter); + $ss = $this->seek(); + + continue; + } + + break; + } + + $this->seek($ss); + + return $lhs; + } + + // consume a list of values for a property + public function propertyValue(&$value, $keyName = null) { + $values = array(); + + if ($keyName !== null) $this->env->currentProperty = $keyName; + + $s = null; + while ($this->expressionList($v)) { + $values[] = $v; + $s = $this->seek(); + if (!$this->literal(',')) break; + } + + if ($s) $this->seek($s); + + if ($keyName !== null) unset($this->env->currentProperty); + + if (count($values) == 0) return false; + + $value = lessc::compressList($values, ', '); + return true; + } + + protected function parenValue(&$out) { + $s = $this->seek(); + + // speed shortcut + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "(") { + return false; + } + + $inParens = $this->inParens; + if ($this->literal("(") && + ($this->inParens = true) && $this->expression($exp) && + $this->literal(")") + ) { + $out = $exp; + $this->inParens = $inParens; + return true; + } else { + $this->inParens = $inParens; + $this->seek($s); + } + + return false; + } + + // a single value + protected function value(&$value) { + $s = $this->seek(); + + // speed shortcut + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "-") { + // negation + if ($this->literal("-", false) && + (($this->variable($inner) && $inner = array("variable", $inner)) || + $this->unit($inner) || + $this->parenValue($inner)) + ) { + $value = array("unary", "-", $inner); + return true; + } else { + $this->seek($s); + } + } + + if ($this->parenValue($value)) return true; + if ($this->unit($value)) return true; + if ($this->color($value)) return true; + if ($this->func($value)) return true; + if ($this->string($value)) return true; + + if ($this->keyword($word)) { + $value = array('keyword', $word); + return true; + } + + // try a variable + if ($this->variable($var)) { + $value = array('variable', $var); + return true; + } + + // unquote string (should this work on any type? + if ($this->literal("~") && $this->string($str)) { + $value = array("escape", $str); + return true; + } else { + $this->seek($s); + } + + // css hack: \0 + if ($this->literal('\\') && $this->match('([0-9]+)', $m)) { + $value = array('keyword', '\\'.$m[1]); + return true; + } else { + $this->seek($s); + } + + return false; + } + + // an import statement + protected function import(&$out) { + if (!$this->literal('@import')) return false; + + // @import "something.css" media; + // @import url("something.css") media; + // @import url(something.css) media; + + if ($this->propertyValue($value)) { + $out = array("import", $value); + return true; + } + } + + protected function mediaQueryList(&$out) { + if ($this->genericList($list, "mediaQuery", ",", false)) { + $out = $list[2]; + return true; + } + return false; + } + + protected function mediaQuery(&$out) { + $s = $this->seek(); + + $expressions = null; + $parts = array(); + + if (($this->literal("only") && ($only = true) || $this->literal("not") && ($not = true) || true) && $this->keyword($mediaType)) { + $prop = array("mediaType"); + if (isset($only)) $prop[] = "only"; + if (isset($not)) $prop[] = "not"; + $prop[] = $mediaType; + $parts[] = $prop; + } else { + $this->seek($s); + } + + + if (!empty($mediaType) && !$this->literal("and")) { + // ~ + } else { + $this->genericList($expressions, "mediaExpression", "and", false); + if (is_array($expressions)) $parts = array_merge($parts, $expressions[2]); + } + + if (count($parts) == 0) { + $this->seek($s); + return false; + } + + $out = $parts; + return true; + } + + protected function mediaExpression(&$out) { + $s = $this->seek(); + $value = null; + if ($this->literal("(") && + $this->keyword($feature) && + ($this->literal(":") && $this->expression($value) || true) && + $this->literal(")") + ) { + $out = array("mediaExp", $feature); + if ($value) $out[] = $value; + return true; + } elseif ($this->variable($variable)) { + $out = array('variable', $variable); + return true; + } + + $this->seek($s); + return false; + } + + // an unbounded string stopped by $end + protected function openString($end, &$out, $nestingOpen=null, $rejectStrs = null) { + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = false; + + $stop = array("'", '"', "@{", $end); + $stop = array_map(array("lessc", "preg_quote"), $stop); + // $stop[] = self::$commentMulti; + + if (!is_null($rejectStrs)) { + $stop = array_merge($stop, $rejectStrs); + } + + $patt = '(.*?)('.implode("|", $stop).')'; + + $nestingLevel = 0; + + $content = array(); + while ($this->match($patt, $m, false)) { + if (!empty($m[1])) { + $content[] = $m[1]; + if ($nestingOpen) { + $nestingLevel += substr_count($m[1], $nestingOpen); + } + } + + $tok = $m[2]; + + $this->count-= strlen($tok); + if ($tok == $end) { + if ($nestingLevel == 0) { + break; + } else { + $nestingLevel--; + } + } + + if (($tok == "'" || $tok == '"') && $this->string($str)) { + $content[] = $str; + continue; + } + + if ($tok == "@{" && $this->interpolation($inter)) { + $content[] = $inter; + continue; + } + + if (!empty($rejectStrs) && in_array($tok, $rejectStrs)) { + break; + } + + $content[] = $tok; + $this->count+= strlen($tok); + } + + $this->eatWhiteDefault = $oldWhite; + + if (count($content) == 0) return false; + + // trim the end + if (is_string(end($content))) { + $content[count($content) - 1] = rtrim(end($content)); + } + + $out = array("string", "", $content); + return true; + } + + protected function string(&$out) { + $s = $this->seek(); + if ($this->literal('"', false)) { + $delim = '"'; + } elseif ($this->literal("'", false)) { + $delim = "'"; + } else { + return false; + } + + $content = array(); + + // look for either ending delim , escape, or string interpolation + $patt = '([^\n]*?)(@\{|\\\\|' . + lessc::preg_quote($delim).')'; + + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = false; + + while ($this->match($patt, $m, false)) { + $content[] = $m[1]; + if ($m[2] == "@{") { + $this->count -= strlen($m[2]); + if ($this->interpolation($inter, false)) { + $content[] = $inter; + } else { + $this->count += strlen($m[2]); + $content[] = "@{"; // ignore it + } + } elseif ($m[2] == '\\') { + $content[] = $m[2]; + if ($this->literal($delim, false)) { + $content[] = $delim; + } + } else { + $this->count -= strlen($delim); + break; // delim + } + } + + $this->eatWhiteDefault = $oldWhite; + + if ($this->literal($delim)) { + $out = array("string", $delim, $content); + return true; + } + + $this->seek($s); + return false; + } + + protected function interpolation(&$out) { + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = true; + + $s = $this->seek(); + if ($this->literal("@{") && + $this->openString("}", $interp, null, array("'", '"', ";")) && + $this->literal("}", false) + ) { + $out = array("interpolate", $interp); + $this->eatWhiteDefault = $oldWhite; + if ($this->eatWhiteDefault) $this->whitespace(); + return true; + } + + $this->eatWhiteDefault = $oldWhite; + $this->seek($s); + return false; + } + + protected function unit(&$unit) { + // speed shortcut + if (isset($this->buffer[$this->count])) { + $char = $this->buffer[$this->count]; + if (!ctype_digit($char) && $char != ".") return false; + } + + if ($this->match('([0-9]+(?:\.[0-9]*)?|\.[0-9]+)([%a-zA-Z]+)?', $m)) { + $unit = array("number", $m[1], empty($m[2]) ? "" : $m[2]); + return true; + } + return false; + } + + // a # color + protected function color(&$out) { + if ($this->match('(#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3}))', $m)) { + if (strlen($m[1]) > 7) { + $out = array("string", "", array($m[1])); + } else { + $out = array("raw_color", $m[1]); + } + return true; + } + + return false; + } + + // consume an argument definition list surrounded by () + // each argument is a variable name with optional value + // or at the end a ... or a variable named followed by ... + // arguments are separated by , unless a ; is in the list, then ; is the + // delimiter. + protected function argumentDef(&$args, &$isVararg) { + $s = $this->seek(); + if (!$this->literal('(')) { + return false; + } + + $values = array(); + $delim = ","; + $method = "expressionList"; + + $isVararg = false; + while (true) { + if ($this->literal("...")) { + $isVararg = true; + break; + } + + if ($this->$method($value)) { + if ($value[0] == "variable") { + $arg = array("arg", $value[1]); + $ss = $this->seek(); + + if ($this->assign() && $this->$method($rhs)) { + $arg[] = $rhs; + } else { + $this->seek($ss); + if ($this->literal("...")) { + $arg[0] = "rest"; + $isVararg = true; + } + } + + $values[] = $arg; + if ($isVararg) { + break; + } + continue; + } else { + $values[] = array("lit", $value); + } + } + + + if (!$this->literal($delim)) { + if ($delim == "," && $this->literal(";")) { + // found new delim, convert existing args + $delim = ";"; + $method = "propertyValue"; + + // transform arg list + if (isset($values[1])) { // 2 items + $newList = array(); + foreach ($values as $i => $arg) { + switch ($arg[0]) { + case "arg": + if ($i) { + $this->throwError("Cannot mix ; and , as delimiter types"); + } + $newList[] = $arg[2]; + break; + case "lit": + $newList[] = $arg[1]; + break; + case "rest": + $this->throwError("Unexpected rest before semicolon"); + } + } + + $newList = array("list", ", ", $newList); + + switch ($values[0][0]) { + case "arg": + $newArg = array("arg", $values[0][1], $newList); + break; + case "lit": + $newArg = array("lit", $newList); + break; + } + + } elseif ($values) { // 1 item + $newArg = $values[0]; + } + + if ($newArg) { + $values = array($newArg); + } + } else { + break; + } + } + } + + if (!$this->literal(')')) { + $this->seek($s); + return false; + } + + $args = $values; + + return true; + } + + // consume a list of tags + // this accepts a hanging delimiter + protected function tags(&$tags, $simple = false, $delim = ',') { + $tags = array(); + while ($this->tag($tt, $simple)) { + $tags[] = $tt; + if (!$this->literal($delim)) break; + } + if (count($tags) == 0) return false; + + return true; + } + + // list of tags of specifying mixin path + // optionally separated by > (lazy, accepts extra >) + protected function mixinTags(&$tags) { + $tags = array(); + while ($this->tag($tt, true)) { + $tags[] = $tt; + $this->literal(">"); + } + + if (!$tags) { + return false; + } + + return true; + } + + // a bracketed value (contained within in a tag definition) + protected function tagBracket(&$parts, &$hasExpression) { + // speed shortcut + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "[") { + return false; + } + + $s = $this->seek(); + + $hasInterpolation = false; + + if ($this->literal("[", false)) { + $attrParts = array("["); + // keyword, string, operator + while (true) { + if ($this->literal("]", false)) { + $this->count--; + break; // get out early + } + + if ($this->match('\s+', $m)) { + $attrParts[] = " "; + continue; + } + if ($this->string($str)) { + // escape parent selector, (yuck) + foreach ($str[2] as &$chunk) { + $chunk = str_replace($this->lessc->parentSelector, "$&$", $chunk); + } + + $attrParts[] = $str; + $hasInterpolation = true; + continue; + } + + if ($this->keyword($word)) { + $attrParts[] = $word; + continue; + } + + if ($this->interpolation($inter, false)) { + $attrParts[] = $inter; + $hasInterpolation = true; + continue; + } + + // operator, handles attr namespace too + if ($this->match('[|-~\$\*\^=]+', $m)) { + $attrParts[] = $m[0]; + continue; + } + + break; + } + + if ($this->literal("]", false)) { + $attrParts[] = "]"; + foreach ($attrParts as $part) { + $parts[] = $part; + } + $hasExpression = $hasExpression || $hasInterpolation; + return true; + } + $this->seek($s); + } + + $this->seek($s); + return false; + } + + // a space separated list of selectors + protected function tag(&$tag, $simple = false) { + if ($simple) { + $chars = '^@,:;{}\][>\(\) "\''; + } else { + $chars = '^@,;{}["\''; + } + $s = $this->seek(); + + $hasExpression = false; + $parts = array(); + while ($this->tagBracket($parts, $hasExpression)); + + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = false; + + while (true) { + if ($this->match('(['.$chars.'0-9]['.$chars.']*)', $m)) { + $parts[] = $m[1]; + if ($simple) break; + + while ($this->tagBracket($parts, $hasExpression)); + continue; + } + + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "@") { + if ($this->interpolation($interp)) { + $hasExpression = true; + $interp[2] = true; // don't unescape + $parts[] = $interp; + continue; + } + + if ($this->literal("@")) { + $parts[] = "@"; + continue; + } + } + + if ($this->unit($unit)) { // for keyframes + $parts[] = $unit[1]; + $parts[] = $unit[2]; + continue; + } + + break; + } + + $this->eatWhiteDefault = $oldWhite; + if (!$parts) { + $this->seek($s); + return false; + } + + if ($hasExpression) { + $tag = array("exp", array("string", "", $parts)); + } else { + $tag = trim(implode($parts)); + } + + $this->whitespace(); + return true; + } + + // a css function + protected function func(&$func) { + $s = $this->seek(); + + if ($this->match('(%|[\w\-_][\w\-_:\.]+|[\w_])', $m) && $this->literal('(')) { + $fname = $m[1]; + + $sPreArgs = $this->seek(); + + $args = array(); + while (true) { + $ss = $this->seek(); + // this ugly nonsense is for ie filter properties + if ($this->keyword($name) && $this->literal('=') && $this->expressionList($value)) { + $args[] = array("string", "", array($name, "=", $value)); + } else { + $this->seek($ss); + if ($this->expressionList($value)) { + $args[] = $value; + } + } + + if (!$this->literal(',')) break; + } + $args = array('list', ',', $args); + + if ($this->literal(')')) { + $func = array('function', $fname, $args); + return true; + } elseif ($fname == 'url') { + // couldn't parse and in url? treat as string + $this->seek($sPreArgs); + if ($this->openString(")", $string) && $this->literal(")")) { + $func = array('function', $fname, $string); + return true; + } + } + } + + $this->seek($s); + return false; + } + + // consume a less variable + protected function variable(&$name) { + $s = $this->seek(); + if ($this->literal($this->lessc->vPrefix, false) && + ($this->variable($sub) || $this->keyword($name)) + ) { + if (!empty($sub)) { + $name = array('variable', $sub); + } else { + $name = $this->lessc->vPrefix.$name; + } + return true; + } + + $name = null; + $this->seek($s); + return false; + } + + /** + * Consume an assignment operator + * Can optionally take a name that will be set to the current property name + */ + protected function assign($name = null) { + if ($name) $this->currentProperty = $name; + return $this->literal(':') || $this->literal('='); + } + + // consume a keyword + protected function keyword(&$word) { + if ($this->match('([\w_\-\*!"][\w\-_"]*)', $m)) { + $word = $m[1]; + return true; + } + return false; + } + + // consume an end of statement delimiter + protected function end() { + if ($this->literal(';', false)) { + return true; + } elseif ($this->count == strlen($this->buffer) || $this->buffer[$this->count] == '}') { + // if there is end of file or a closing block next then we don't need a ; + return true; + } + return false; + } + + protected function guards(&$guards) { + $s = $this->seek(); + + if (!$this->literal("when")) { + $this->seek($s); + return false; + } + + $guards = array(); + + while ($this->guardGroup($g)) { + $guards[] = $g; + if (!$this->literal(",")) break; + } + + if (count($guards) == 0) { + $guards = null; + $this->seek($s); + return false; + } + + return true; + } + + // a bunch of guards that are and'd together + // TODO rename to guardGroup + protected function guardGroup(&$guardGroup) { + $s = $this->seek(); + $guardGroup = array(); + while ($this->guard($guard)) { + $guardGroup[] = $guard; + if (!$this->literal("and")) break; + } + + if (count($guardGroup) == 0) { + $guardGroup = null; + $this->seek($s); + return false; + } + + return true; + } + + protected function guard(&$guard) { + $s = $this->seek(); + $negate = $this->literal("not"); + + if ($this->literal("(") && $this->expression($exp) && $this->literal(")")) { + $guard = $exp; + if ($negate) $guard = array("negate", $guard); + return true; + } + + $this->seek($s); + return false; + } + + /* raw parsing functions */ + + protected function literal($what, $eatWhitespace = null) { + if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault; + + // shortcut on single letter + if (!isset($what[1]) && isset($this->buffer[$this->count])) { + if ($this->buffer[$this->count] == $what) { + if (!$eatWhitespace) { + $this->count++; + return true; + } + // goes below... + } else { + return false; + } + } + + if (!isset(self::$literalCache[$what])) { + self::$literalCache[$what] = lessc::preg_quote($what); + } + + return $this->match(self::$literalCache[$what], $m, $eatWhitespace); + } + + protected function genericList(&$out, $parseItem, $delim="", $flatten=true) { + $s = $this->seek(); + $items = array(); + while ($this->$parseItem($value)) { + $items[] = $value; + if ($delim) { + if (!$this->literal($delim)) break; + } + } + + if (count($items) == 0) { + $this->seek($s); + return false; + } + + if ($flatten && count($items) == 1) { + $out = $items[0]; + } else { + $out = array("list", $delim, $items); + } + + return true; + } + + + // advance counter to next occurrence of $what + // $until - don't include $what in advance + // $allowNewline, if string, will be used as valid char set + protected function to($what, &$out, $until = false, $allowNewline = false) { + if (is_string($allowNewline)) { + $validChars = $allowNewline; + } else { + $validChars = $allowNewline ? "." : "[^\n]"; + } + if (!$this->match('('.$validChars.'*?)'.lessc::preg_quote($what), $m, !$until)) return false; + if ($until) $this->count -= strlen($what); // give back $what + $out = $m[1]; + return true; + } + + // try to match something on head of buffer + protected function match($regex, &$out, $eatWhitespace = null) { + if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault; + + $r = '/'.$regex.($eatWhitespace && !$this->writeComments ? '\s*' : '').'/Ais'; + if (preg_match($r, $this->buffer, $out, null, $this->count)) { + $this->count += strlen($out[0]); + if ($eatWhitespace && $this->writeComments) $this->whitespace(); + return true; + } + return false; + } + + // match some whitespace + protected function whitespace() { + if ($this->writeComments) { + $gotWhite = false; + while (preg_match(self::$whitePattern, $this->buffer, $m, null, $this->count)) { + if (isset($m[1]) && empty($this->seenComments[$this->count])) { + $this->append(array("comment", $m[1])); + $this->seenComments[$this->count] = true; + } + $this->count += strlen($m[0]); + $gotWhite = true; + } + return $gotWhite; + } else { + $this->match("", $m); + return strlen($m[0]) > 0; + } + } + + // match something without consuming it + protected function peek($regex, &$out = null, $from=null) { + if (is_null($from)) $from = $this->count; + $r = '/'.$regex.'/Ais'; + $result = preg_match($r, $this->buffer, $out, null, $from); + + return $result; + } + + // seek to a spot in the buffer or return where we are on no argument + protected function seek($where = null) { + if ($where === null) return $this->count; + else $this->count = $where; + return true; + } + + /* misc functions */ + + public function throwError($msg = "parse error", $count = null) { + $count = is_null($count) ? $this->count : $count; + + $line = $this->line + + substr_count(substr($this->buffer, 0, $count), "\n"); + + if (!empty($this->sourceName)) { + $loc = "$this->sourceName on line $line"; + } else { + $loc = "line: $line"; + } + + // TODO this depends on $this->count + if ($this->peek("(.*?)(\n|$)", $m, $count)) { + throw new exception("$msg: failed at `$m[1]` $loc"); + } else { + throw new exception("$msg: $loc"); + } + } + + protected function pushBlock($selectors=null, $type=null) { + $b = new stdclass; + $b->parent = $this->env; + + $b->type = $type; + $b->id = self::$nextBlockId++; + + $b->isVararg = false; // TODO: kill me from here + $b->tags = $selectors; + + $b->props = array(); + $b->children = array(); + + $this->env = $b; + return $b; + } + + // push a block that doesn't multiply tags + protected function pushSpecialBlock($type) { + return $this->pushBlock(null, $type); + } + + // append a property to the current block + protected function append($prop, $pos = null) { + if ($pos !== null) $prop[-1] = $pos; + $this->env->props[] = $prop; + } + + // pop something off the stack + protected function pop() { + $old = $this->env; + $this->env = $this->env->parent; + return $old; + } + + // remove comments from $text + // todo: make it work for all functions, not just url + protected function removeComments($text) { + $look = array( + 'url(', '//', '/*', '"', "'" + ); + + $out = ''; + $min = null; + while (true) { + // find the next item + foreach ($look as $token) { + $pos = strpos($text, $token); + if ($pos !== false) { + if (!isset($min) || $pos < $min[1]) $min = array($token, $pos); + } + } + + if (is_null($min)) break; + + $count = $min[1]; + $skip = 0; + $newlines = 0; + switch ($min[0]) { + case 'url(': + if (preg_match('/url\(.*?\)/', $text, $m, 0, $count)) + $count += strlen($m[0]) - strlen($min[0]); + break; + case '"': + case "'": + if (preg_match('/'.$min[0].'.*?(?indentLevel = 0; + } + + public function indentStr($n = 0) { + return str_repeat($this->indentChar, max($this->indentLevel + $n, 0)); + } + + public function property($name, $value) { + return $name . $this->assignSeparator . $value . ";"; + } + + protected function isEmpty($block) { + if (empty($block->lines)) { + foreach ($block->children as $child) { + if (!$this->isEmpty($child)) return false; + } + + return true; + } + return false; + } + + public function block($block) { + if ($this->isEmpty($block)) return; + + $inner = $pre = $this->indentStr(); + + $isSingle = !$this->disableSingle && + is_null($block->type) && count($block->lines) == 1; + + if (!empty($block->selectors)) { + $this->indentLevel++; + + if ($this->breakSelectors) { + $selectorSeparator = $this->selectorSeparator . $this->break . $pre; + } else { + $selectorSeparator = $this->selectorSeparator; + } + + echo $pre . + implode($selectorSeparator, $block->selectors); + if ($isSingle) { + echo $this->openSingle; + $inner = ""; + } else { + echo $this->open . $this->break; + $inner = $this->indentStr(); + } + + } + + if (!empty($block->lines)) { + $glue = $this->break.$inner; + echo $inner . implode($glue, $block->lines); + if (!$isSingle && !empty($block->children)) { + echo $this->break; + } + } + + foreach ($block->children as $child) { + $this->block($child); + } + + if (!empty($block->selectors)) { + if (!$isSingle && empty($block->children)) echo $this->break; + + if ($isSingle) { + echo $this->closeSingle . $this->break; + } else { + echo $pre . $this->close . $this->break; + } + + $this->indentLevel--; + } + } +} + +/** + * Class for compressed result + */ +class lessc_formatter_compressed extends lessc_formatter_classic { + public $disableSingle = true; + public $open = "{"; + public $selectorSeparator = ","; + public $assignSeparator = ":"; + public $break = ""; + public $compressColors = true; + + public function indentStr($n = 0) { + return ""; + } +} + +/** + * Class for lessjs + */ +class lessc_formatter_lessjs extends lessc_formatter_classic { + public $disableSingle = true; + public $breakSelectors = true; + public $assignSeparator = ": "; + public $selectorSeparator = ","; +} \ No newline at end of file From 1d2c2f855128bf54444646c1600b411142c25d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Wed, 14 Aug 2019 23:00:40 +0200 Subject: [PATCH 505/798] NEW Add payments GET and POST REST API endpoints for supplierinvoices. --- htdocs/core/lib/website.lib.php | 4 +- .../class/api_supplier_invoices.class.php | 756 +++++++++++------- 2 files changed, 453 insertions(+), 307 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4d89210cd44..579c5575988 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -33,7 +33,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html') { $nbrep = 0; @@ -187,7 +187,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php index 416f7e11e94..56eeb2c17b5 100644 --- a/htdocs/fourn/class/api_supplier_invoices.class.php +++ b/htdocs/fourn/class/api_supplier_invoices.class.php @@ -19,357 +19,503 @@ use Luracast\Restler\RestException; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; +require_once DOL_DOCUMENT_ROOT . '/fourn/class/paiementfourn.class.php'; /** * API class for supplier invoices * + * @property DoliDB db * @access protected * @class DolibarrApiAccess {@requires user,external} */ class SupplierInvoices extends DolibarrApi { - /** - * - * @var array $FIELDS Mandatory fields, checked when create and update object - */ - static $FIELDS = array( - 'socid', - ); + /** + * + * @var array $FIELDS Mandatory fields, checked when create and update object + */ + static $FIELDS = array( + 'socid', + ); - /** - * @var FactureFournisseur $invoice {@type FactureFournisseur} - */ - public $invoice; + /** + * @var FactureFournisseur $invoice {@type FactureFournisseur} + */ + public $invoice; - /** - * Constructor - */ - public function __construct() - { - global $db, $conf; - $this->db = $db; - $this->invoice = new FactureFournisseur($this->db); - } + /** + * Constructor + */ + public function __construct() + { + global $db; + $this->db = $db; + $this->invoice = new FactureFournisseur($this->db); + } - /** - * Get properties of a supplier invoice object - * - * Return an array with supplier invoice information - * - * @param int $id ID of supplier invoice - * @return array|mixed data without useless information - * - * @throws RestException - */ - public function get($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { - throw new RestException(401); - } + /** + * Get properties of a supplier invoice object + * + * Return an array with supplier invoice information + * + * @param int $id ID of supplier invoice + * @return array|mixed data without useless information + * + * @throws RestException + */ + public function get($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $this->invoice->fetchObjectLinked(); - return $this->_cleanObjectDatas($this->invoice); - } + $this->invoice->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->invoice); + } - /** - * List invoices - * - * Get a list of supplier invoices - * - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @param int $limit Limit for list - * @param int $page Page number - * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} - * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled - * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" - * @return array Array of invoice objects - * - * @throws RestException - */ - public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') - { - global $db, $conf; + /** + * List invoices + * + * Get a list of supplier invoices + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} + * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" + * @return array Array of invoice objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') + { + global $db; - $obj_ret = array(); + $obj_ret = array(); - // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + // case of external user, $thirdparty_ids param is ignored and replaced by user's socid + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; - // If the internal user must only see his customers, force searching by him - $search_sale = 0; - if (! DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) $search_sale = DolibarrApiAccess::$user->id; + // If the internal user must only see his customers, force searching by him + $search_sale = 0; + if (! DolibarrApiAccess::$user->rights->societe->client->voir) $search_sale = DolibarrApiAccess::$user->id; - $sql = "SELECT t.rowid"; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) - $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; + $sql = "SELECT t.rowid"; + // We need these fields in order to filter by sale (including the case where the user can only see his prospects) + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale + // We need this table joined to the select in order to filter by sale + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; - if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; - if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale + $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; + if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; + if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale - // Filter by status - if ($status == 'draft') { - $sql.= " AND t.fk_statut IN (0)"; - } - if ($status == 'unpaid') { - $sql.= " AND t.fk_statut IN (1)"; - } - if ($status == 'paid') { - $sql.= " AND t.fk_statut IN (2)"; - } - if ($status == 'cancelled') { - $sql.= " AND t.fk_statut IN (3)"; - } - // Insert sale filter - if ($search_sale > 0) { - $sql .= " AND sc.fk_user = ".$search_sale; - } - // 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).")"; - } + // Filter by status + if ($status == 'draft') { + $sql.= " AND t.fk_statut IN (0)"; + } + if ($status == 'unpaid') { + $sql.= " AND t.fk_statut IN (1)"; + } + if ($status == 'paid') { + $sql.= " AND t.fk_statut IN (2)"; + } + if ($status == 'cancelled') { + $sql.= " AND t.fk_statut IN (3)"; + } + // Insert sale filter + if ($search_sale > 0) { + $sql .= " AND sc.fk_user = ".$search_sale; + } + // 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.= $db->order($sortfield, $sortorder); - if ($limit) { - if ($page < 0) - { - $page = 0; - } - $offset = $limit * $page; + $sql.= $db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) + { + $page = 0; + } + $offset = $limit * $page; - $sql.= $db->plimit($limit + 1, $offset); - } + $sql.= $db->plimit($limit + 1, $offset); + } - $result = $db->query($sql); - if ($result) { - $i = 0; - $num = $db->num_rows($result); - $min = min($num, ($limit <= 0 ? $num : $limit)); - while ($i < $min) - { - $obj = $db->fetch_object($result); - $invoice_static = new FactureFournisseur($db); - if($invoice_static->fetch($obj->rowid)) { - $obj_ret[] = $this->_cleanObjectDatas($invoice_static); - } - $i++; - } - } - else { - throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); - } - if ( ! count($obj_ret)) { - throw new RestException(404, 'No supplier invoice found'); - } - return $obj_ret; - } + $result = $db->query($sql); + if ($result) { + $i = 0; + $num = $db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) + { + $obj = $db->fetch_object($result); + $invoice_static = new FactureFournisseur($db); + if($invoice_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($invoice_static); + } + $i++; + } + } + else { + throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); + } + if ( ! count($obj_ret)) { + throw new RestException(404, 'No supplier invoice found'); + } + return $obj_ret; + } - /** - * Create supplier invoice object - * - * @param array $request_data Request datas - * @return int ID of supplier invoice - */ - public function post($request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401, "Insuffisant rights"); - } - // Check mandatory fields - $result = $this->_validate($request_data); + /** + * Create supplier invoice object + * + * @param array $request_data Request datas + * + * @return int ID of supplier invoice + * + * @throws 401 + * @throws 500 + */ + public function post($request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401, "Insuffisant rights"); + } + // Check mandatory fields + $result = $this->_validate($request_data); - foreach($request_data as $field => $value) { - $this->invoice->$field = $value; - } - if(! array_keys($request_data, 'date')) { - $this->invoice->date = dol_now(); - } - /* We keep lines as an array - if (isset($request_data["lines"])) { - $lines = array(); - foreach ($request_data["lines"] as $line) { - array_push($lines, (object) $line); - } - $this->invoice->lines = $lines; - }*/ + foreach($request_data as $field => $value) { + $this->invoice->$field = $value; + } + if(! array_keys($request_data, 'date')) { + $this->invoice->date = dol_now(); + } - if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); - } - return $this->invoice->id; - } + if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); + } + return $this->invoice->id; + } - /** - * Update supplier invoice - * - * @param int $id Id of supplier invoice to update - * @param array $request_data Datas - * @return int - */ - public function put($id, $request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } + /** + * Update supplier invoice + * + * @param int $id Id of supplier invoice to update + * @param array $request_data Datas + * + * @return int + * + * @throws 401 + * @throws 404 + */ + public function put($id, $request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - foreach($request_data as $field => $value) { - if ($field == 'id') continue; - $this->invoice->$field = $value; - } + foreach($request_data as $field => $value) { + if ($field == 'id') continue; + $this->invoice->$field = $value; + } - if($this->invoice->update($id, DolibarrApiAccess::$user)) - return $this->get($id); + if($this->invoice->update($id, DolibarrApiAccess::$user)) + return $this->get($id); - return false; - } + return false; + } - /** - * Delete supplier invoice - * - * @param int $id Supplier invoice ID - * @return type - */ - public function delete($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + /** + * Delete supplier invoice + * + * @param int $id Supplier invoice ID + * + * @return array + * + * @throws 401 + * @throws 404 + * @throws 500 + */ + public function delete($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) - { - throw new RestException(500); - } + if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) + { + throw new RestException(500); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Supplier invoice deleted' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Supplier invoice deleted' + ) + ); + } + + /** + * Validate an order + * + * @param int $id Order ID + * @param int $idwarehouse Warehouse ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/validate + * + * @return array + * + * @throws 304 + * @throws 401 + * @throws 404 + * @throws 405 + * @throws 500 + */ + public function validate($id, $idwarehouse = 0, $notrigger = 0) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already validated'); + } + if ($result < 0) { + throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); + } + + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' + ) + ); + } + + /** + * Get list of payments of a given supplier invoice + * + * @param int $id Id of SupplierInvoice + * + * @url GET {id}/payments + * + * @return array + * @throws 400 + * @throws 401 + * @throws 404 + * @throws 405 + */ + public function getPayments($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } + + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } + + $result = $this->invoice->getListOfPayments(); + if( $result < 0) { + throw new RestException(405, $this->invoice->error); + } + + return $result; + } - /** - * Validate an order - * - * @param int $id Order ID - * @param int $idwarehouse Warehouse ID - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * - * @url POST {id}/validate - * - * @return array - * FIXME An error 403 is returned if the request has an empty body. - * Error message: "Forbidden: Content type `text/plain` is not supported." - * Workaround: send this in the body - * { - * "idwarehouse": 0, - * "notrigger": 0 - * } - */ - public function validate($id, $idwarehouse = 0, $notrigger = 0) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + /** + * Add payment line to a specific supplier invoice with the remain to pay as amount. + * + * @param int $id Id of invoice + * @param string $datepaye {@from body} Payment date {@type timestamp} + * @param int $paiementid {@from body} Payment mode Id {@min 1} + * @param string $closepaidinvoices {@from body} Close paid invoices {@choice yes,no} + * @param int $accountid {@from body} Account Id {@min 1} + * @param string $num_paiement {@from body} Payment number (optional) + * @param string $comment {@from body} Note (optional) + * @param string $chqemetteur {@from body} Payment issuer (mandatory if paiementcode = 'CHQ') + * @param string $chqbank {@from body} Issuer bank name (optional) + * + * @url POST {id}/payments + * + * @return int Payment ID + * @throws 400 + * @throws 401 + * @throws 404 + */ + public function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement = '', $comment = '', $chqemetteur = '', $chqbank = '') + { + global $conf; - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(403); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } - $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); - if ($result == 0) { - throw new RestException(304, 'Error nothing done. May be object is already validated'); - } - if ($result < 0) { - throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' - ) - ); - } + if (! empty($conf->banque->enabled)) { + if(empty($accountid)) { + throw new RestException(400, 'Account ID is mandatory'); + } + } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore - /** - * Clean sensible object datas - * - * @param Object $object Object to clean - * @return array Array of cleaned object properties - */ - protected function _cleanObjectDatas($object) - { - // phpcs:enable - $object = parent::_cleanObjectDatas($object); + if(empty($paiementid)) { + throw new RestException(400, 'Paiement ID or Paiement Code is mandatory'); + } - unset($object->rowid); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); - return $object; - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - /** - * Validate fields before create or update object - * - * @param array $data Datas to validate - * @return array - * - * @throws RestException - */ - private function _validate($data) - { - $invoice = array(); - foreach (SupplierInvoices::$FIELDS as $field) { - if (!isset($data[$field])) - throw new RestException(400, "$field field missing"); - $invoice[$field] = $data[$field]; - } - return $invoice; - } + // Calculate amount to pay + $totalpaye = $this->invoice->getSommePaiement(); + $totaldeposits = $this->invoice->getSumDepositsUsed(); + $resteapayer = price2num($this->invoice->total_ttc - $totalpaye - $totaldeposits, 'MT'); + + $this->db->begin(); + + $amounts = array(); + $multicurrency_amounts = array(); + + $resteapayer = price2num($resteapayer, 'MT'); + $amounts[$id] = $resteapayer; + + // Multicurrency + $newvalue = price2num($this->invoice->multicurrency_total_ttc, 'MT'); + $multicurrency_amounts[$id] = $newvalue; + + // Creation of payment line + $paiement = new PaiementFourn($this->db); + $paiement->datepaye = $datepaye; + $paiement->amounts = $amounts; // Array with all payments dispatching with invoice id + $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching + $paiement->paiementid = $paiementid; + $paiement->paiementcode = dol_getIdFromCode($this->db, $paiementid, 'c_paiement', 'id', 'code', 1); + $paiement->num_payment = $num_paiement; + $paiement->note_public = $comment; + + $paiement_id = $paiement->create(DolibarrApiAccess::$user, ($closepaidinvoices=='yes'?1:0)); // This include closing invoices + if ($paiement_id < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Payment error : '.$paiement->error); + } + + if (! empty($conf->banque->enabled)) { + $result=$paiement->addPaymentToBank(DolibarrApiAccess::$user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, $chqemetteur, $chqbank); + if ($result < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Add payment to bank error : '.$paiement->error); + } + } + + $this->db->commit(); + + return $paiement_id; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param Object $object Object to clean + * @return array Array of cleaned object properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); + + unset($object->rowid); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); + + return $object; + } + + /** + * Validate fields before create or update object + * + * @param array $data Datas to validate + * @return array + * + * @throws RestException + */ + private function _validate($data) + { + $invoice = array(); + foreach (SupplierInvoices::$FIELDS as $field) { + if (!isset($data[$field])) + throw new RestException(400, "$field field missing"); + $invoice[$field] = $data[$field]; + } + return $invoice; + } } From 003642fe10bea2e870bd45cef6cd3e08a7385562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Wed, 14 Aug 2019 23:07:18 +0200 Subject: [PATCH 506/798] Preserve spaces instead of tabs for indentation. --- .../class/api_supplier_invoices.class.php | 854 +++++++++--------- 1 file changed, 427 insertions(+), 427 deletions(-) diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php index 56eeb2c17b5..a4cdadc8265 100644 --- a/htdocs/fourn/class/api_supplier_invoices.class.php +++ b/htdocs/fourn/class/api_supplier_invoices.class.php @@ -30,492 +30,492 @@ require_once DOL_DOCUMENT_ROOT . '/fourn/class/paiementfourn.class.php'; */ class SupplierInvoices extends DolibarrApi { - /** - * - * @var array $FIELDS Mandatory fields, checked when create and update object - */ - static $FIELDS = array( - 'socid', - ); + /** + * + * @var array $FIELDS Mandatory fields, checked when create and update object + */ + static $FIELDS = array( + 'socid', + ); - /** - * @var FactureFournisseur $invoice {@type FactureFournisseur} - */ - public $invoice; + /** + * @var FactureFournisseur $invoice {@type FactureFournisseur} + */ + public $invoice; - /** - * Constructor - */ - public function __construct() - { - global $db; - $this->db = $db; - $this->invoice = new FactureFournisseur($this->db); - } + /** + * Constructor + */ + public function __construct() + { + global $db; + $this->db = $db; + $this->invoice = new FactureFournisseur($this->db); + } - /** - * Get properties of a supplier invoice object - * - * Return an array with supplier invoice information - * - * @param int $id ID of supplier invoice - * @return array|mixed data without useless information - * - * @throws RestException - */ - public function get($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { - throw new RestException(401); - } + /** + * Get properties of a supplier invoice object + * + * Return an array with supplier invoice information + * + * @param int $id ID of supplier invoice + * @return array|mixed data without useless information + * + * @throws RestException + */ + public function get($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $this->invoice->fetchObjectLinked(); - return $this->_cleanObjectDatas($this->invoice); - } + $this->invoice->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->invoice); + } - /** - * List invoices - * - * Get a list of supplier invoices - * - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @param int $limit Limit for list - * @param int $page Page number - * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} - * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled - * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" - * @return array Array of invoice objects - * - * @throws RestException - */ - public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') - { - global $db; + /** + * List invoices + * + * Get a list of supplier invoices + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} + * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" + * @return array Array of invoice objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') + { + global $db; - $obj_ret = array(); + $obj_ret = array(); - // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; + // case of external user, $thirdparty_ids param is ignored and replaced by user's socid + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; - // If the internal user must only see his customers, force searching by him - $search_sale = 0; - if (! DolibarrApiAccess::$user->rights->societe->client->voir) $search_sale = DolibarrApiAccess::$user->id; + // If the internal user must only see his customers, force searching by him + $search_sale = 0; + if (! DolibarrApiAccess::$user->rights->societe->client->voir) $search_sale = DolibarrApiAccess::$user->id; - $sql = "SELECT t.rowid"; - // We need these fields in order to filter by sale (including the case where the user can only see his prospects) - if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; - $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; + $sql = "SELECT t.rowid"; + // We need these fields in order to filter by sale (including the case where the user can only see his prospects) + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; - // We need this table joined to the select in order to filter by sale - if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + // We need this table joined to the select in order to filter by sale + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; - if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; - if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; - if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale + $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; + if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; + if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale - // Filter by status - if ($status == 'draft') { - $sql.= " AND t.fk_statut IN (0)"; - } - if ($status == 'unpaid') { - $sql.= " AND t.fk_statut IN (1)"; - } - if ($status == 'paid') { - $sql.= " AND t.fk_statut IN (2)"; - } - if ($status == 'cancelled') { - $sql.= " AND t.fk_statut IN (3)"; - } - // Insert sale filter - if ($search_sale > 0) { - $sql .= " AND sc.fk_user = ".$search_sale; - } - // 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).")"; - } + // Filter by status + if ($status == 'draft') { + $sql.= " AND t.fk_statut IN (0)"; + } + if ($status == 'unpaid') { + $sql.= " AND t.fk_statut IN (1)"; + } + if ($status == 'paid') { + $sql.= " AND t.fk_statut IN (2)"; + } + if ($status == 'cancelled') { + $sql.= " AND t.fk_statut IN (3)"; + } + // Insert sale filter + if ($search_sale > 0) { + $sql .= " AND sc.fk_user = ".$search_sale; + } + // 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.= $db->order($sortfield, $sortorder); - if ($limit) { - if ($page < 0) - { - $page = 0; - } - $offset = $limit * $page; + $sql.= $db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) + { + $page = 0; + } + $offset = $limit * $page; - $sql.= $db->plimit($limit + 1, $offset); - } + $sql.= $db->plimit($limit + 1, $offset); + } - $result = $db->query($sql); - if ($result) { - $i = 0; - $num = $db->num_rows($result); - $min = min($num, ($limit <= 0 ? $num : $limit)); - while ($i < $min) - { - $obj = $db->fetch_object($result); - $invoice_static = new FactureFournisseur($db); - if($invoice_static->fetch($obj->rowid)) { - $obj_ret[] = $this->_cleanObjectDatas($invoice_static); - } - $i++; - } - } - else { - throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); - } - if ( ! count($obj_ret)) { - throw new RestException(404, 'No supplier invoice found'); - } - return $obj_ret; - } + $result = $db->query($sql); + if ($result) { + $i = 0; + $num = $db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) + { + $obj = $db->fetch_object($result); + $invoice_static = new FactureFournisseur($db); + if($invoice_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($invoice_static); + } + $i++; + } + } + else { + throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); + } + if ( ! count($obj_ret)) { + throw new RestException(404, 'No supplier invoice found'); + } + return $obj_ret; + } - /** - * Create supplier invoice object - * - * @param array $request_data Request datas - * - * @return int ID of supplier invoice - * - * @throws 401 - * @throws 500 - */ - public function post($request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401, "Insuffisant rights"); - } - // Check mandatory fields - $result = $this->_validate($request_data); + /** + * Create supplier invoice object + * + * @param array $request_data Request datas + * + * @return int ID of supplier invoice + * + * @throws 401 + * @throws 500 + */ + public function post($request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401, "Insuffisant rights"); + } + // Check mandatory fields + $result = $this->_validate($request_data); - foreach($request_data as $field => $value) { - $this->invoice->$field = $value; - } - if(! array_keys($request_data, 'date')) { - $this->invoice->date = dol_now(); - } + foreach($request_data as $field => $value) { + $this->invoice->$field = $value; + } + if(! array_keys($request_data, 'date')) { + $this->invoice->date = dol_now(); + } - if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); - } - return $this->invoice->id; - } + if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); + } + return $this->invoice->id; + } - /** - * Update supplier invoice - * - * @param int $id Id of supplier invoice to update - * @param array $request_data Datas - * - * @return int - * - * @throws 401 - * @throws 404 - */ - public function put($id, $request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } + /** + * Update supplier invoice + * + * @param int $id Id of supplier invoice to update + * @param array $request_data Datas + * + * @return int + * + * @throws 401 + * @throws 404 + */ + public function put($id, $request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - foreach($request_data as $field => $value) { - if ($field == 'id') continue; - $this->invoice->$field = $value; - } + foreach($request_data as $field => $value) { + if ($field == 'id') continue; + $this->invoice->$field = $value; + } - if($this->invoice->update($id, DolibarrApiAccess::$user)) - return $this->get($id); + if($this->invoice->update($id, DolibarrApiAccess::$user)) + return $this->get($id); - return false; - } + return false; + } - /** - * Delete supplier invoice - * - * @param int $id Supplier invoice ID - * - * @return array - * - * @throws 401 - * @throws 404 - * @throws 500 - */ - public function delete($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + /** + * Delete supplier invoice + * + * @param int $id Supplier invoice ID + * + * @return array + * + * @throws 401 + * @throws 404 + * @throws 500 + */ + public function delete($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) - { - throw new RestException(500); - } + if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) + { + throw new RestException(500); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Supplier invoice deleted' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Supplier invoice deleted' + ) + ); + } - /** - * Validate an order - * - * @param int $id Order ID - * @param int $idwarehouse Warehouse ID - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * - * @url POST {id}/validate - * - * @return array - * - * @throws 304 - * @throws 401 - * @throws 404 - * @throws 405 - * @throws 500 - */ - public function validate($id, $idwarehouse = 0, $notrigger = 0) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + /** + * Validate an order + * + * @param int $id Order ID + * @param int $idwarehouse Warehouse ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/validate + * + * @return array + * + * @throws 304 + * @throws 401 + * @throws 404 + * @throws 405 + * @throws 500 + */ + public function validate($id, $idwarehouse = 0, $notrigger = 0) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); - if ($result == 0) { - throw new RestException(304, 'Error nothing done. May be object is already validated'); - } - if ($result < 0) { - throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); - } + $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already validated'); + } + if ($result < 0) { + throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' + ) + ); + } - /** - * Get list of payments of a given supplier invoice - * - * @param int $id Id of SupplierInvoice - * - * @url GET {id}/payments - * - * @return array - * @throws 400 - * @throws 401 - * @throws 404 - * @throws 405 - */ - public function getPayments($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { - throw new RestException(401); - } - if(empty($id)) { - throw new RestException(400, 'Invoice ID is mandatory'); - } + /** + * Get list of payments of a given supplier invoice + * + * @param int $id Id of SupplierInvoice + * + * @url GET {id}/payments + * + * @return array + * @throws 400 + * @throws 401 + * @throws 404 + * @throws 405 + */ + public function getPayments($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - $result = $this->invoice->getListOfPayments(); - if( $result < 0) { - throw new RestException(405, $this->invoice->error); - } + $result = $this->invoice->getListOfPayments(); + if( $result < 0) { + throw new RestException(405, $this->invoice->error); + } - return $result; - } + return $result; + } - /** - * Add payment line to a specific supplier invoice with the remain to pay as amount. - * - * @param int $id Id of invoice - * @param string $datepaye {@from body} Payment date {@type timestamp} - * @param int $paiementid {@from body} Payment mode Id {@min 1} - * @param string $closepaidinvoices {@from body} Close paid invoices {@choice yes,no} - * @param int $accountid {@from body} Account Id {@min 1} - * @param string $num_paiement {@from body} Payment number (optional) - * @param string $comment {@from body} Note (optional) - * @param string $chqemetteur {@from body} Payment issuer (mandatory if paiementcode = 'CHQ') - * @param string $chqbank {@from body} Issuer bank name (optional) - * - * @url POST {id}/payments - * - * @return int Payment ID - * @throws 400 - * @throws 401 - * @throws 404 - */ - public function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement = '', $comment = '', $chqemetteur = '', $chqbank = '') - { - global $conf; + /** + * Add payment line to a specific supplier invoice with the remain to pay as amount. + * + * @param int $id Id of invoice + * @param string $datepaye {@from body} Payment date {@type timestamp} + * @param int $paiementid {@from body} Payment mode Id {@min 1} + * @param string $closepaidinvoices {@from body} Close paid invoices {@choice yes,no} + * @param int $accountid {@from body} Account Id {@min 1} + * @param string $num_paiement {@from body} Payment number (optional) + * @param string $comment {@from body} Note (optional) + * @param string $chqemetteur {@from body} Payment issuer (mandatory if paiementcode = 'CHQ') + * @param string $chqbank {@from body} Issuer bank name (optional) + * + * @url POST {id}/payments + * + * @return int Payment ID + * @throws 400 + * @throws 401 + * @throws 404 + */ + public function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement = '', $comment = '', $chqemetteur = '', $chqbank = '') + { + global $conf; - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(403); - } - if(empty($id)) { - throw new RestException(400, 'Invoice ID is mandatory'); - } + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(403); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if (! empty($conf->banque->enabled)) { - if(empty($accountid)) { - throw new RestException(400, 'Account ID is mandatory'); - } - } + if (! empty($conf->banque->enabled)) { + if(empty($accountid)) { + throw new RestException(400, 'Account ID is mandatory'); + } + } - if(empty($paiementid)) { - throw new RestException(400, 'Paiement ID or Paiement Code is mandatory'); - } + if(empty($paiementid)) { + throw new RestException(400, 'Paiement ID or Paiement Code is mandatory'); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - // Calculate amount to pay - $totalpaye = $this->invoice->getSommePaiement(); - $totaldeposits = $this->invoice->getSumDepositsUsed(); - $resteapayer = price2num($this->invoice->total_ttc - $totalpaye - $totaldeposits, 'MT'); + // Calculate amount to pay + $totalpaye = $this->invoice->getSommePaiement(); + $totaldeposits = $this->invoice->getSumDepositsUsed(); + $resteapayer = price2num($this->invoice->total_ttc - $totalpaye - $totaldeposits, 'MT'); - $this->db->begin(); + $this->db->begin(); - $amounts = array(); - $multicurrency_amounts = array(); + $amounts = array(); + $multicurrency_amounts = array(); - $resteapayer = price2num($resteapayer, 'MT'); - $amounts[$id] = $resteapayer; + $resteapayer = price2num($resteapayer, 'MT'); + $amounts[$id] = $resteapayer; - // Multicurrency - $newvalue = price2num($this->invoice->multicurrency_total_ttc, 'MT'); - $multicurrency_amounts[$id] = $newvalue; + // Multicurrency + $newvalue = price2num($this->invoice->multicurrency_total_ttc, 'MT'); + $multicurrency_amounts[$id] = $newvalue; - // Creation of payment line - $paiement = new PaiementFourn($this->db); - $paiement->datepaye = $datepaye; - $paiement->amounts = $amounts; // Array with all payments dispatching with invoice id - $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching - $paiement->paiementid = $paiementid; - $paiement->paiementcode = dol_getIdFromCode($this->db, $paiementid, 'c_paiement', 'id', 'code', 1); - $paiement->num_payment = $num_paiement; - $paiement->note_public = $comment; + // Creation of payment line + $paiement = new PaiementFourn($this->db); + $paiement->datepaye = $datepaye; + $paiement->amounts = $amounts; // Array with all payments dispatching with invoice id + $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching + $paiement->paiementid = $paiementid; + $paiement->paiementcode = dol_getIdFromCode($this->db, $paiementid, 'c_paiement', 'id', 'code', 1); + $paiement->num_payment = $num_paiement; + $paiement->note_public = $comment; - $paiement_id = $paiement->create(DolibarrApiAccess::$user, ($closepaidinvoices=='yes'?1:0)); // This include closing invoices - if ($paiement_id < 0) - { - $this->db->rollback(); - throw new RestException(400, 'Payment error : '.$paiement->error); - } + $paiement_id = $paiement->create(DolibarrApiAccess::$user, ($closepaidinvoices=='yes'?1:0)); // This include closing invoices + if ($paiement_id < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Payment error : '.$paiement->error); + } - if (! empty($conf->banque->enabled)) { - $result=$paiement->addPaymentToBank(DolibarrApiAccess::$user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, $chqemetteur, $chqbank); - if ($result < 0) - { - $this->db->rollback(); - throw new RestException(400, 'Add payment to bank error : '.$paiement->error); - } - } + if (! empty($conf->banque->enabled)) { + $result=$paiement->addPaymentToBank(DolibarrApiAccess::$user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, $chqemetteur, $chqbank); + if ($result < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Add payment to bank error : '.$paiement->error); + } + } - $this->db->commit(); + $this->db->commit(); - return $paiement_id; - } + return $paiement_id; + } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore - /** - * Clean sensible object datas - * - * @param Object $object Object to clean - * @return array Array of cleaned object properties - */ - protected function _cleanObjectDatas($object) - { - // phpcs:enable - $object = parent::_cleanObjectDatas($object); + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param Object $object Object to clean + * @return array Array of cleaned object properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); - unset($object->rowid); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); + unset($object->rowid); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); - return $object; - } + return $object; + } - /** - * Validate fields before create or update object - * - * @param array $data Datas to validate - * @return array - * - * @throws RestException - */ - private function _validate($data) - { - $invoice = array(); - foreach (SupplierInvoices::$FIELDS as $field) { - if (!isset($data[$field])) - throw new RestException(400, "$field field missing"); - $invoice[$field] = $data[$field]; - } - return $invoice; - } + /** + * Validate fields before create or update object + * + * @param array $data Datas to validate + * @return array + * + * @throws RestException + */ + private function _validate($data) + { + $invoice = array(); + foreach (SupplierInvoices::$FIELDS as $field) { + if (!isset($data[$field])) + throw new RestException(400, "$field field missing"); + $invoice[$field] = $data[$field]; + } + return $invoice; + } } From f7537998104a96b12b06ace9c6a47687c538c387 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 23:27:34 +0200 Subject: [PATCH 507/798] FIX Support #tag into url of website module --- htdocs/core/lib/website.lib.php | 14 +++++++++----- ...rate.jpg => website_template-corporate.jpg} | Bin .../websites/website_template-stellar.png | Bin 0 -> 280585 bytes htdocs/website/index.php | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) rename htdocs/install/doctemplates/websites/{website-template-corporate.jpg => website_template-corporate.jpg} (100%) create mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.png diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4696e2adc8f..388c047499b 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -30,14 +30,16 @@ * @param string $content Content to replace * @param int $removephppart 0=Replace PHP sections with a PHP badge. 1=Remove completely PHP sections. * @param string $contenttype Content type + * @param int $containerid Contenair id * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html', $containerid='') { $nbrep = 0; - dol_syslog('dolWebsiteReplacementOfLinks start (contenttype='.$contenttype." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')', LOG_DEBUG); + dol_syslog('dolWebsiteReplacementOfLinks start (contenttype='.$contenttype." containerid=".$containerid." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'')." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'').')', LOG_DEBUG); + //if ($contenttype == 'html') { print $content;exit; } // Replace php code. Note $content may come from database and does not contains body tags. $replacewith='...php...'; @@ -72,8 +74,9 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Replace relative link / with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); - // Replace relative link /xxx.php with dolibarr URL - $content = preg_replace('/(href=")\/?([^:\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep); + // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) + // TODO To support replacement of /xxx.php?bbb=ccc we must be able to replace only if link is not already DOL_URL_ROOT.'/website/index.php + $content = preg_replace('/(href=")\/?([^:\"]*)\.php(\?[^\"<>#]*)?(#[^\"<>]*)?\"/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\4"', $content, -1, $nbrep); // Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/ $content = preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); @@ -97,6 +100,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); dol_syslog('dolWebsiteReplacementOfLinks end', LOG_DEBUG); + //if ($contenttype == 'html') { print $content;exit; } return $content; } @@ -196,7 +200,7 @@ function dolWebsiteOutput($content, $contenttype='html', $containerid='') global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." containerid=".$containerid." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." containerid=".$containerid." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'')." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); diff --git a/htdocs/install/doctemplates/websites/website-template-corporate.jpg b/htdocs/install/doctemplates/websites/website_template-corporate.jpg similarity index 100% rename from htdocs/install/doctemplates/websites/website-template-corporate.jpg rename to htdocs/install/doctemplates/websites/website_template-corporate.jpg diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.png b/htdocs/install/doctemplates/websites/website_template-stellar.png new file mode 100644 index 0000000000000000000000000000000000000000..718fc808b456e9004389ddd875f618e4409b81c4 GIT binary patch literal 280585 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�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±UQ+p((qovo(zby45@!--#qg{g)rM{5N zu8b#qAKOfA^tW5zA!*1A1>APWq7EKa5f)qSIG_|8DEt7X`+ZPz_6gv6{dRy8YhUU7 z3FGU$ng12T8w>;P&JhJIm)8>k-@nsjYg)>kMM6f<&Bs)*Q%)6%-qoVEwU1iwpeDt& zwLL1J(vg2nHMS?0uRzFvikf3i^@7)HH)LKm-m=7L=c=c?M(LF`#ZSn=E|VYL1*yIF`9dVzWtJ)b-g8a7tm2AWjLwGi)CWOkwIiD z7-~g z6;uN|NNg4dY-)F&jt01YZNHm(>;JpWW9P-Pt$0);DANE8)jJz1>F%zJO|bLUTfwviEyc+Lk?lKHGn!n%??FSPU$&WX{DhcC;j($jS7(%D|Qa$75hoyQJ)&H?`P{=L zt7A|UnsifMJr(a*f%g8eG=om~OZX0QU`7L?HEI(V%_MwYfrU^bkR2_jM!d83v839T z%v_|5J(9X*Lo-E*YGgsBr}S;p zryi1ZqrS0g-;V&5_4dsZ*8gQk1C@ca|9MCM;?4ZyKh#Hk0d8eo-JzLVUxZcNea@fg zG~JPSU*3Nm8*~UQo=$U+3McCSTz<>lI7b+!LFMj4LeECRPC_d{6TWo%oDQ4xK{Xeu zCx(|>DodQ`dIyGP-ki10=;oKo;Npfc*B?S3XHKtE;OD6_yz|aR!Xkp0c4?l>5VOMP zo<@3YR--|pvAtz95XtJL{SpDg>8I&V%nAMG@)+t*)Z%#<<2116s=sUIFGWyX4QBi@ zHM`PT!-Hz1E-}hzoMqY4Gnq}akL^Y=1!EV`miHvvD}0!zbb#xwV7Ir1jKRk`X>~2l zVc#kk=MXM^;iHN&Q(E>YQpno{wA+D$N7#eXPCxn|lm>sQ>bMK*Iz73QU&Yp11=2b{ zGE}o9TEtK_A4X^Ww++4bpEmTtz0XPHzZ{^4Au<<$?)r}e=Fa&aQ?48UslCsi|5YdY z@nHNe+UUMep1{yXs)&4gP1dkT3{$AL`l9`|T319|bDpAn$1ZPnnvU-^8H#zbP*}Z= zlB#(2i1cAKQ<5YfvO*aG)e?Cub7zV>zDzl;U6kT=q&wb4=#>3NQcml$oT_l98JZ0$ z9quLZ_-fn`a#Qu|<+PkMD+8TmYrfEaW|wE^`TSyRO_eDwJ*cu8ppAkcwqKZYX-0vy zRR!h=Z(gXyOPY=!#*7_8EzcUNQm6JFGth&M@xfXa5yXBKA??PY>I2T#DKjHozMBq8 zF$uK>RQQGkPpff8=CiO!o)_%(_4iHDZ19AqkvEeaKk~PsXQ24mTO?b=CiJrx9ns=l zB=0kV<>@NcqgLcxc+JL}lLhWgXC+izp4O|IFZZU_;By_R&0j(T(XaN=bTje09<{zC za|+m-Te#mp`Ng`v{ITVF-S^Ed7F7b2CfPp#&&j$Mi*NT6LW&@Cfjd}R%Tf_~{P@~1w z=Y@d6M--?ocEp1wuw$VI#f=?3FIshN$H&>&b=^K@%!o)dGOYq>KAdzE^rX7;ysKv{ zKB|G1DQ_^R4tqi{Mr-5BpEC?QN84u)FAq?2)4gn_Xe6VzK(xOnEVBt}`LI6dY;t}b zK=n#~4#ug^sz^MP^ga_)dVIQtp^x6a&{$nTi+;!k>wv!e)IWurqT7V%P`^>GjkgvX z{=l@%OYPx`9*SCVUUDV5D}BqODGO9m>DD?y5`MyCoXw9o-3TXHxeNEB13e2vtmd?g z(#6xp7{J!>Gg#=n=+xR=3mJ7Ux$S~IqfpBngpHS($C~vjtrRfaZiEi4esrW!c0uy` znKtoD{Qi5u{A0Sq_l3U+KgPq?->wg;PTKwV!`wz6pZuZyD%bxf?SEJ*;{n*&ZG5c< zSSU@($3S`Bja|F%KM^=f+hQ38TImvFH=y>h`hg zn+U&-a#OTmEIhkKj$w|1$7opmWd`;|Nppne=y5v{W}Vm{LWh{dnD}C7^^&pH*uIJx z*WYYDE#qFs{^(FZmfuC=SIUQfo_@cXF4Gdeelt_7S_bJsj|D6_yB5)u+A-X~@l5lz zeyaoK8|*h}AP57$m&H+;Jw0{>_1erC?&wp%&(l|zs#Cg;F9s3fp5B0a(J2Yo z5WIU|Ka~BKVK-=ggjV}>4}U51KZgX#ANGHcY34Ei&Fa@Dmw>SHy?-n5`mgeb3N#q) zr%?6R?yu<;COaA$n}zWmY>)GLFiDtXYQHfOM~;=>w!bI?CpMt!PS-u=^$$=cE9JI>E_(tH<$eN|4I(X$H_6o;D z?6aHsnXOunGn)MFz%=FRcsW=6Ha?9g0Z#MuwD>80Mlz0X&qvCYkYwohX1 zo8$p8Goz4VSyx-ma%9PI^iTC(gEcuAj4u{`U3~K1OV++r{Rs4I(|7E;Ydm_)EqY94F+P0+$L|(@tf1}qae~YKj5+<+eE`F4)B>Ky($f;gVpm_SThv4FVNIBc@w!i9*7=ltE6tIPN zoC&4wd+B(NrI4}@=w7BqA2NR#&KvY3dbMlkU+q4><71O$Sk6p;bLz_ zaOqdub#2`^ZEa~ewE)Fx!S&Lr#H`jh6s4aE3A6M;F%)m6sE`~eiaUdnNMIChY;u)5 zvydr{LW_h5c$@eu)p9(blp8;nWF$Q5hQ4b>Lh>1qLF7(zmSvJ99Maw%&%^j4^YDH#yKVl_8Bmm*@q9FEaAG4h9t>C)5b#ZXCj5~$6TCSxj ze8K1*@PYh)_B}klkJmN~IKVmi)s7d4Db1u1$5I<rDRDBLQ
`{|Ly^+Bm=<9fM;gJI2~rFdF{@we!9~R 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 FngCid)."\n"; //$out.=$newcontent; $out.=''; From c739b9566609afdf1cd71a64cdf6730dad8e43e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Wed, 14 Aug 2019 23:33:06 +0200 Subject: [PATCH 508/798] Fix codestyle lessc.class.php should be excluded from ruleset as it is an external lib --- dev/setup/codesniffer/ruleset.xml | 1 + htdocs/core/lib/files.lib.php | 2 +- htdocs/fourn/class/api_supplier_invoices.class.php | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index daf73e5b2a7..89ea98a051b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -6,6 +6,7 @@ build/html build/aps documents + htdocs/core/class/lessc.class.php htdocs/custom htdocs/includes htdocs/install/doctemplates/websites diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 79b0badf0ff..a5bbd68a736 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1911,7 +1911,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE)!==true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php index a4cdadc8265..a2da7a77494 100644 --- a/htdocs/fourn/class/api_supplier_invoices.class.php +++ b/htdocs/fourn/class/api_supplier_invoices.class.php @@ -362,9 +362,9 @@ class SupplierInvoices extends DolibarrApi throw new RestException(400, 'Invoice ID is mandatory'); } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } $result = $this->invoice->fetch($id); if( ! $result ) { From 2b805cc63df86c9d9824e5d2ab49f4648a1d1dbe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 23:47:01 +0200 Subject: [PATCH 509/798] Add tooltip help in CSS edition --- htdocs/langs/en_US/website.lang | 3 ++- htdocs/website/index.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index f01494fcdac..a05ead24df7 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -106,4 +106,5 @@ DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? MyWebsitePages=My website pages SearchReplaceInto=Search | Replace into -ReplaceString=New string \ No newline at end of file +ReplaceString=New string +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. \ No newline at end of file diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 04642d0dc84..3624843dba7 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2557,7 +2557,8 @@ if ($action == 'editcss') // CSS file print '
'; - print $langs->trans('WEBSITE_CSS_INLINE'); + $htmlhelp=$langs->trans("CSSContentTooltipHelp"); + print $form->textwithpicto($langs->trans('WEBSITE_CSS_INLINE'), $htmlhelp, 1, 'help', '', 0, 2, 'csstooltip'); print ''; $doleditor=new DolEditor('WEBSITE_CSS_INLINE', $csscontent, '', '220', 'ace', 'In', true, false, 'ace', 0, '100%', ''); From b2f1cb22e8459a2085efc2fd737dfda6bcba9693 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 23:57:44 +0200 Subject: [PATCH 510/798] Add tooltip in website module --- htdocs/langs/en_US/website.lang | 3 ++- htdocs/website/index.php | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index a05ead24df7..ec8bc0c2232 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -107,4 +107,5 @@ DeleteAlsoMedias=Delete also all medias files specific to this website? MyWebsitePages=My website pages SearchReplaceInto=Search | Replace into ReplaceString=New string -CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. \ No newline at end of file +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. +LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page. \ No newline at end of file diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 3624843dba7..8797020a717 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2578,9 +2578,12 @@ if ($action == 'editcss') // Common HTML header print '
'; + print $langs->trans('WEBSITE_HTML_HEADER'); $htmlhelp=$langs->trans("Example").' :
'; $htmlhelp.=dol_htmlentitiesbr($htmlheadercontentdefault); - print $form->textwithpicto($langs->trans('WEBSITE_HTML_HEADER'), $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip'); + $textwithhelp = $form->textwithpicto('', $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip'); + $htmlhelp2=$langs->trans("LinkAndScriptsHereAreNotLoadedInEditor").'
'; + print $form->textwithpicto($textwithhelp, $htmlhelp2, 1, 'warning', '', 0, 2, 'htmlheadertooltip2'); print '
'; $doleditor=new DolEditor('WEBSITE_HTML_HEADER', $htmlheadercontent, '', '220', 'ace', 'In', true, false, 'ace', 0, '100%', ''); From dfe2c3de74ec1bea1b1ab03af7095e804b3a5c80 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 00:31:37 +0200 Subject: [PATCH 511/798] Add template stellar --- .../websites/website_template-stellar.zip | Bin 0 -> 197145 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.zip diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip new file mode 100644 index 0000000000000000000000000000000000000000..b7fdfc1bd375876648ed59f349e8642918064161 GIT binary patch literal 197145 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 literal 0 HcmV?d00001 From f81463af0cfefcd7f19adf5fdcf8e86e63af72b0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 00:55:47 +0200 Subject: [PATCH 512/798] Update templates --- htdocs/core/lib/website2.lib.php | 20 ++++++ .../websites/website_template-corporate.zip | Bin 2297082 -> 2297147 bytes .../websites/website_template-stellar.zip | Bin 197145 -> 197333 bytes htdocs/langs/en_US/website.lang | 2 + htdocs/website/index.php | 59 ++++++++++++++++++ 5 files changed, 81 insertions(+) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index f45df83700a..e622b79bd2c 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -322,6 +322,26 @@ function dolSaveManifestJson($file, $content) return $result; } +/** + * Save content of a page on disk + * + * @param string $file Full path of filename to generate + * @param string $content Content of file + * @return boolean True if OK + */ +function dolSaveReadme($file, $content) +{ + global $conf, $pathofwebsite; + + dol_syslog("Save README.md file into ".$file); + + dol_mkdir($pathofwebsite); + $result = file_put_contents($file, $content); + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + return $result; +} /** diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip index 6ee933a0c7bff29d44b2352e7e3d9ed557da39d5..620f2d379c4b371c74801f5dad724329fda7296b 100644 GIT binary patch delta 115553 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Ʒ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

wj{I>B&yFlWj>eP|Jlh#ehpRyH`w=;n5!lL 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 delta 116679 zcmY(q18^tJ7w;V>8{4*R+jcf~Hnx*rY}>YNn;YA?0`eauQiG5DGdzHs{;LVph78q)1pX_KR&7X7&+z|hQ&;0aC;o%h z;&{*tjDM6^4yum)k1jhwHzEJg(eg3b3o-6|Qzp*oA5zwsvQDYl|4Boa-~|FY;Y~I`Bx^O%LJZ^m*W@M{ zG3v)Z^36s3VE#uw^N6QN|H$GHF#+@+eV!n~lmADd@bE}~h5T12e}(#2Xsz(@=x7c9 z+L8C6x0e2+U2}{F+W#nZISJ$IpJ^o-qXXd|B^6`jJO3k2Y|L(l|0wh|60`L+5(|Xt zpZ&85OY`6KwQ9Ct(HH--g==H`{kxr1SbgmOy^S?}>_7irW9W(z_Fv)r74Bc*wXPW9 z!@vLQcB(`0_P=h21_WgPnNnd52^jx_Pys`NRslo8_`H8D7l4W2k^fCtb0qY9E(Z`0 zbXMvO3K16I!Vzb@{@Csh)x^EKk{cTpfXkyX{Cp=!5xEt`PVPRz{ z11Xc91m`o_^NRST_~p!2m`?d%bFT1b+uy+Ew%KF5&0)3 za|%06x7Nufk!3vCuiNX>9mp0Rp0+)a9q8A-V9G!M@WN`m%^Cm8+AO+p$u9<9pZl+m z*UNzHuHM(adn$H52jg@)_KpG#PsJT=SP|hFTPD25#jCtw5SqHZ$Z?;+#?3xt`A97l zX^&xZjsccW^aoHrsJ+^95vq_;7c7P};k0TVW7&OZ228;ObR4gD`?2Z%F%*?BRwtrp zdyp-FW7~>RqJgDCo9#XegcF7P#FzKu;ON1_v?X&>8p^ujUH|UrfyN01#%N$72WE%A z=$c>e>vyuJZ!&abkK3I_?SfB@%X9NK{00Bbjq{&uKD4e{m*=K!{0rL`ug=fkEU?GF zcMsmgRhf@MlEWQ+fBjsUs&m;9X!8yrpwGnxz(d?Xg1!&$o*cPd51FPIujY^IOOUR1 zZN^>oZo0n*_@v5!mV4V0`lOo*kDLd09NtTbGTHw0=WpT?h3aCYPcP4vUAiZ5%KgNd zJj!uBIHUhC1@47o1&zGT;}l3M7j_;c_+hth{%A2MxXRAKb8QnT)|9yc)`pzglXWmo5ZP+O_9AwcjSgEhXB_Y! zQOS$Hwo_VFXSV*jdSwXgS5L6m4UL%zd{($ldnZZGw)+HW$J)>EDuyfj6<~JCnmUnq zggla1NbO3`KV|={atgU@QBr=F_qNamSg5$COtQ36QMqu%;$Jha-YA#Jl#v@eGy_3V zjY&g8~WBhqjck&{E_E5t%V#|yAB_dI~i?MP5ltHA>Ic$vPZ|#tgYP$z{L?}gJP{& zRec#rDO}5G*^(NE(%_Jr#43y<#3Hg~0~BQLm&`QPct!3yQ~Mi1>#evgoj z5_P8DPI=G71>06AOJOzuZU`f-B6ntS(7*9+k7q;T&%hy-t$leK;$j?JOb7TU!_}e? zWA!bFSZ(%GiZiOFXb%*e|GZBadbcP4 zW`0jZ<3hxF?U#L0R_!@@^Dk5|)lgc0RTwN8YF>rD0!LxR!`9XgHWf}$p%t!zHN|BT z0?WkeC|}YOP9DYvl+2hPH%I3ZT-*f5-Bd8DQYBD>P(W+M73@jdkcuicC{LoLy%YYZ z)VxWdin50mu8W!cI>bn!U`~8i;CGOGBbNz``1mPPiQrkrf6AstU_tySD5#L%Yo2jr z1utnPx;W4h;s=f2>YAS+-Mk*m#TvN?OduRvt~qs&HDu%mnAj0b;^XHrt)1CEGL{GO zl{56sFpb~1Gy>7;7f72)fZ&$JCJ-czQiHu4V(Y^dCN~<&D}Y^VF}3fFCX=GVyDg6d z;^{t*wv4^lE(3p1Bb{m5rmv86ecqD^jvyV#tIsguB7-VUkTseLbkc0Y6gqWyfU5%I zSdeT@7Fw19m@(%z>zP(-c;I>_d#M!;1^OY@UgqKF7QE(%k41-%RU3piA6R=mzNbXk z#z1O_91Cd`C1D503TSFDN^r@-Y?<|o2K8L0@iV(p(b2+#C=~^bnsqppu;^p16A|m4 zCY4f+2h8_F3&wDc{R;D91VAX8On~$!ES-@;>Gbvjnq8cn7GjP9Zw=7g(o$u^zSl3a zZw=Dq1v#I%VOO(ku#!3vg7pW(jy4VPA=iur=|Wf#9oWA>_7Em5VA2Z=faVQhGp)gp z!N4dKk-&K48gvO~@JtMeYKOT?FuhEog)oyJ?HVq(Et`gF5XW7NOPkm&l}8^m+d2%v zS>liZS6diWWpN@SUhtZcJYS++z-KXK zmr09FazZ!YOdk~e7e{&Bfq6b&M6>X^g+jE^&UB2eY+1S))uA!|o&geYo0U{-1Z^t| zba2}aw<5A3OyOS0-_oP9!wEq+!UU%Ae=ghrC)GwqCds5N@eAoGki_JJm#fievVMt< z&=0t~-zr=F==+*r^i*tn=xu{J% za&1gR(z;IwxDncNgTQ%e5uZl$;gVp;%v4FKd!=`CPt&P!XCapx| zceIze5^&NLQgaplwnvJ=W61;5IZwIY+7MkBzLxgiC*ODJ7vV@RKHT-cHrzr0^xY?z zy!Q}xGt0B4aJtL0#c}Wbf~g3F@sO8GU7Ld0m37NwM=+xFH)2p_M~))BBYX-PrC+G+ zIi|!x>6n6uZiE+Xaau%iYrZjpX0=Fh^>k%1wR?P^R?rDjtpx2Q#Tm3q87aub!;0d* z#u)8(%w334-wSI^7NrDQbP0q2R@gp1LFm0{^boEME4XRw<0?aWxpPQRr+J+{s{qcm z9@?|_gwL4NMB5h717`vGN1$Xvmg9@YhDd~dFuOLqa}gwnKJ$Y=aEZ2B>13w4PNP9V z)*)WpR4vo&p)4b%9j4~75r&e4?_?)4l+4V(H}Q?XSaJxx)~g&%h1#?H1+X(buROKIZsWFbuB7v<)<7b8*G10VyEHn_zFMfT$?)t#|GMU9oe zdob+Be?McVRymAgr>d6vGPa4z-PQg`;03FeS(7@{oMAo_+X9g+QeX#?ESc1ohA7RS zkqmXncR0z|7&yv^BUaM`z*h_6L-87INlTe^{PL`03>G>_e_+Oa*rmIDB}q4V_{DwG z?!!@A=?hA^8!H@T^LraFI|l=nuq$b3lDfX60|qEgGUErqV5omS&kA=xyw%|zng1#A zvmT_~Z<#Ns+RjI55z<6?;M~&$An*GP;|jwKL>15P>ytp#Y`=U*z^LC_rM}4rvEnU+PTp%bv-n?}ww@is&BIbp$`#=kwxwl`c4v}C? zQyWn>C#7Y1mpy%^fI0J?bw9B8YE0OB>*DNFT^NRR(Pe^YKJ&ZR@%rBpn<2#NI6iZ1{tPyE(z!?E|@md(rnt zTf99R8g)G5EU9q5UF?@AfcMJ@s(qcs^-$j-@snz(IoIBZwrZZXD0kzk%Hb9pvev=g zz8D&9hwrE`SE|>|=UV(-#!J=6GRVRb4o^qkCu^@O$rt@fA3wE>TmL6@};z zyyKdb-+(?L6bTj+_UL40erziZ3R>QK#S{j(I~U3t=N7DuGMcjGPwAsmYPG1yiZm^) z;F9;KXxh=KO`~M!nFQEfZDo}wIj7{D(vAr#3l)z6z;)P1$Fo5vPZMP44pfqo7d{7l zCAlaYJxRk5V3yX`EAvOKpJBFqZ=-&Y;YPNvTPa9LxIu!649#?*-A;w9@ zK!`z9jbJ0c&bQTo2h^P2#4d@ilc1i!ZDF>MTv34_0Yf|HNcX363)OH6(e}vdKyY`- zIF7O|B1~9R|p4H5MI&82)mA)Yida1 z?JXb{^7_Rp{W36w47ec|QJV}|Ud|6hBD#LHQbozzTCQ}M_e1MfURJ82$5%II*-oV0 zT7iYA0=$aX^2}K)p3w6h#GBOT$rK?c~spAlkhKB$_aXw0;KFJ)-6;+mo`9a)C?AjIZoN#rpBsqwGd zeZ%rfzeGt*<=vW2XJgOOb;7IiaKgPUSf-n-0f=u{yXl+MhdBz_HkQ?&A-Y||+{%MN z^RBZtfQSKp$>6kykBo>|G8Gm^YU%XwL6H-M(OpL!M%mY5KOPW;^c&zfLp>_5I%sh@ zW<#ze$C$18q0x8O-I+r77@FLTJ_FX)?zbcYr3v9mEEFcOd9a;d7VYxbY3WERG+a-$ z0g8Z>dAN!4U3mk+;*bwsS7r50#WYr{N7N1b8WX0rx6%^kNBOsM`U;V!@|xGiEWL-< zEn(O@B3G%koCm(=NlW<+pAg^n75TFD%3c)-lL@&OF)R>N`Fe4f&25 z^CBfFR))*X5*UMR+w+~nxUf35K2X?vUfZ9^! zFUk{Q>nS|?=*PUDlV}{9i4e@0tNSLvj~t_*^ncfdN)Q%_D7E9UyuX2UvE2tDDu`ia zt`a!SjD#MU&8HqV#W72g|0kD;PHz1l5 zbG80_lnTtjfh1eM@yF7X>BC6n<_oL61)!oUk#FP}h~(?XRElAY~WO#X~H z8TDs-`QUttw;W@w`DL7s4~Q;gkI>eoA?VQuE?t4eNl7OKvVIIkL1B*}6er0QJ-BA4 zwmJ}Bl8`)#gZlQKk7zVvdl+@3Mj)HsxRhZg0?Ng|C`v189|vI)N5Y(jirz5UoUv=c z!!-Ya9KXR9S{h=A2vtg&PbyojJ#&J`pZ5_J$F#7+h-=FVO& ze~hzFTMQk{(X<#VH|!ef-#2IM#N7d@0}V26`z5-1Kh(JyZ_&B|SCM+rh&<6}4n-QD zTxlQUE0;tCSAgmfM*SNhRE5Uip2tW)VhknrN4rUqV{x303EcDlPDQCq}tz_~(f+MhJpTsP8upIfG}uWX?^bZMrMQ zl$Fcu+t)uVTL8%%6wKAhmI_J9!|$GZou4*1UoFr8fL2w%cX zl6U7fdS!s}E!eM`uA`g=XC&{6AegUcRH1gLA8ru@T3qVKT}X&-7Y^I%_h%wi?Du zFEL9#t8L%RE1n0fr+wxab|bJhTWv;fLFETr^*^*e)wL%k5ECwpucg_&&>9H<#+x zb4#GNl+m4&i=%++@C`yCc}?M0bPsJOBI_#IX`17K{IK8mNy0e=8y(2 zs{%|?hxT39;DU{_FEiR>eyjkc%e&Z(lrT1)Qclj^Czj`MmuN?Z6P&Akg7{aa*OPEa zrkD;>WujIZ4^G4CdPmc`fAK9Qc&C_+#6UHn-R;?B=il_W5Bnc=IG4juL&Vi$b;+TO z%^(EbnPvLK@?s=2fmARDE7=hLVGC;}E(M@*@UI6ziB2WYxeu}By4JPKDBz?*Y@IP&5=?XD$ve$|?}lB6dhbHIlTO6-Nf%Lx`Fa zCiufmhlx9rP!)-%UEEovz$uTaOog-}H(;y~=DG2_SPIJp7g2VVCZw{JiIlo8gaR=2 zzc=nO6C)AKZN#cbG-Y!n2?`)#H9{F0=16DOOj2>ugYO}%>U-nulrar`o(WQMYJ+U_ zY@6sg`{ zo9pPj^Fb{-Fyeedvf)4dS0ADk;s8=mWd3KKIlQJt(X^e9q8j8}c*uSu4X6G!#LA_^ zL@1(caEejVTTpEVIo2wC9xSe6$a={K9p!e;ra!p{meiqn6LqCA@1j z+vS|f0WmtKBRuGFMr5*GMJ?w)l|7z4m}1Wf$ohS@AkwcKcFp-!)hYU`ya2a5&v#}; zO#b<{zznt;V`obf>9wv!9kXQaS+_l-zg)GyKo~C>;jAQ}=lRF(JoEMY+e}&zHDptl zyM`=Cb)^C6g%5@?VwoANuvdHC2%{O@ZzSygo{X9LPB@Sy2wmd@mqi;TZ+e>{{vhEjN zG-7{tpttF{>RKRfvw)*;T?&e$PF?Kbv@Y*DWISEDi5Yh@I2(Q##yYLmIx)#|Hdf%; zC}ho!?;`kSCK*V+9o0Z|ZOX$W5!G)OL^TlAz| z!)`+ZklLkq`FzOWIRNLFb?QfnNgX=+uX&T0ABQg#eHBL)R`hPFw9NziQsmUL@$~+T zY>p;wWvNlV1k4w%ne_pb4ChEGh&4jJ-@zC7{e1^%C2oqFI~YV2t4ua~fP-)AMo`zc z!;ja{gB6U+r_k6N26n(V>MNF0$mP{qsM~G*=k@8~=k9c6Kj3WbZX*$3r_cYxr%P3u ze&mc%3@F{1A-Bt5r*A&2;jgFIGF0F|Y*vo;kjfi*Ft-4K1RpaI7_85GHR%^21dx>h z2&Mv$a|l|B*LAmcImeym%*tG{dm-NPb_EC7h)K#IduR1kX>5@U120fiU*aOt^3uRy z6gJ*;TY@q)96%!PHXKyaABxC{i};El%Gy`EWKOxGrpYvivq|R;ewAy?Iw+%}g6t2f zob$u*g!weo;dIs*e}YNhMTcan9>tG1XaBef&w7*IBag2BAwlu+(u(d6?w@fX8YqT> z=P~CACpOsTtYG0+h%iL(mfKz%=RaS#PU6L`4z0hTi2&Ij%3qS02pBpw)jZLPcw#zW zvsZkPO6YNjPm(jP3q&GFyIYIqozn)oN4WXY*xZi+Gd9r`<^9r}X+`I#S8`gM6g4h? z1i4zqv0eSSpWRL{b4dr_xJ1pb+7vrBwH)7ijMyvTOFJrz%@ncx(ljxGWQ#Csf79wC zWIZ$&V*o4#srIe(o6n%5V;r8lkYS41S0!hPYn&IuA4;$(7YHd|kFC{BD$2tQGFcmD z70)#;U{tiIoo1LRRxRiuHkW3F;7qM<^Du34fV0x!5Tn^Bp%fb>Ku$6_XaalwhS zRBf8EPu`p+x7T)@cx*l73TeJ?TLrZVwBMXMXp$jDSQ>7J%HugiW@VM&{n^V#L)(lz zcq<5dv$s`yT|Dn>Y&tQH%xfTpru~jkYk<7WM>2=$z);1@dns^*Pwe=mx8b?9;kz|H zzsgo1ePX!`<_XQ>6RjFd@Un)ya9TNP8EDaO(Y+p32u(vEx&qqOrHsw6dB*8g-lHr8hVQ9}#4G7)65I_t4 z({a!dKd?@gaDN81W~8E4EpHpHHvOVga+)LfDJvYs5h2@~B*GP;cxoj`O}&0+N64~oiStbzu4qvO=>}g)mo@gH9oAU!ACQ^>Pp4x#o@*gynAAbF>^~Ud~ zRk3yV;1Tl6Kys}YIA%E}n;&B$C@|9wEl#O44>i0TmH>|mtn)T# z7m<&J!?BI71M%Rj33=>2wjOfGXvS^flc?wWlcbVPmAo94+Xv;g2%T1&D*U1Fg(Z{JpwDtjivF~I+iVXyj}#gdn~3THugABs*^a=faXJ;S zFQI102xa1V(VF&B#rPy|Y)+s_;{&5$qz=iS(-|=&fyd5U6#SRqdm%?yhe8GY#ROaU zjtsl#KpwVY;w=T8B3s+O>!ShQ(cTPGZ1ap~c=$@!mzt*ft~|sW$AH0=QG(;6OfDL$ z{9#yyK{l2pY=)q=0hYGvg(e+R7Drjh8X;&%bLO6tLy;i(iLLNs9fgWcOs>>Ci`G|! z&d$!NjSVxNPA@rG{i=$A;@|8SR@Jy>M%Cls$Gx}Oc-=I4iQVmL`XjWX2f4mA!+fzd zTeoU6-6|6q-6LI@vVgA0ry*^HuKQ#DfpADXqpg`PuTUN~+n}eFOl12Q9fZ49F@kldDmpD2HXC|86KGzS(AQ1vwqZ zwosya>cMT~7@zOBvFZrq2ItoU=;i&c)?dcj@$$jGdH5MKZr5B^6Z4^bex~3vSe7z6 zP3GQTYI8*82(Wp^53+KkC*JruyfT@Iu3YJqKF9%0^sqU@1GJrN9x@iBwPqRjMEy7 z%n}{tiZkCb$@=IrulbnQ4itAfuhVB+9T`w{q=BO=CjrkN!Qil@Y&Nw-ah5>3uRAi- zFwN=N6bgg_-$S-CsJjI^G4dtAi^=BeOF`V3tkfEqwp}u2qI4`&RCfk4SW(xXupSmZ znD-512q>RU&#qc}6{HLtJ}Wr1FW4&dR$D4HQ7}h(LDqys^Z-V7yWR${A1%`9R+czw zdj^s|3*c4jys*G%cyDB=EVZX}U@#wju8pgzn$-Sc)i`M*pTixVJ)xLwcn{_#N=ihN zUL{Ob;8ma_7L;ahq&Zim;+AX?TD7|f(itA*2GpyxeDBa9@oXX2FX*aYvVuV%E64E_ z*qX#j7DT?fAPFUdQ_fhSRVQVjLkffv?>dk_q8rw8g{DBSvf7|PcL2o#=fm}E<2q<3 zXgjmzuW5D4DzAaGliMX=Cg3O@?Mnee+bDZ3EEsDYu~)+yX=3&?uxcBo z(tf2!6{4BzaK{*0#?vX|*s(B4#1ZMR0uDzc2n{8_r%Sq~k!3DUd-lX%v>4|=T?1T^ z=DG-eK8S#Jrf^$eh7D2nHX+dA`5!D@BGH=DHPso=eb)y)Y_3Vh!QtQ6RWMz?OAvQ>6t%<&|8FT00Qx#}- zeGe}~tUvV~IO<@x$n(MOrRh!;XW#PiPEQ9#hH~VKS&$qv#5>=7BjH4TwojY*y2oNI zo8pIp<3Ne4c)q6Z&&vtY#?GNzp1vby>-sMiHSa~qwOtA8oUtz*bP%Pw0OntLxlK_> zmM=bHz%6fq5;+JnX0$1-+=`BM8zgd4}Mc< ze|-M1YS4Q(b$Y{<5kL+eAR=-e4CSv`w)b!iFy7kpcSH^UokHG$U`PIL_E=qS94(j? zu*gd1{Ch0PCnbQ>&Si&zU%-l3o6=Hioj`EY>4U^a7;d zJ1OWXD={$WaPuZtsNw+Rhkid1&o|z!?@-gZw%6u)9W9Xwm<@bSoL-$u)`_oupcC(j zgYMsn8Z%x3{-wu1aB$3Vtmx78d&tY}@#ZELz#E#jL8kA5@LGr24|v7|3!VItQn=^*u~7~>)Y-o{vgHPof_8b%PZ?bzi7fd>hWmz9~FiiFCU5y9Grxs zok#N}e5iLZryXo(d3E<~ziTR@BM};NXVJDY5ZKvWSP=f`O_s-y;#%sElZIx{0EJDK zqoTqFNb~U}%K-LI;?=s$=di}0SG0m*<47&c;n6`4v-z#C>O(w+QVb6L_C`b*mpCt{ zXB+c@pCk@wDwW&F$q;&qq$5r#5paAV`8;jza6AW@do!U~nz*ig@x~6AcVcL>PI0be z2lz>+a7+84?sfy8|3k zS!0?GpT-@DZeN5YhYGLhw;COF)qw;v@G?GJ zhQ|GyV}k_Ws3;8S4Qs*{Az4q)AtIu!(+8j&F!EzmJ`OQrmd9n+1>TS+=Q3&GEFUgn zOYLIlW72JQ;E92}e7*bq<|-={L3yj9_3%3b`vC-kmT<~SkYmjG%L2XtZ`Y`SHD)3+ zW&cEu!2U>m&{;0A8khSJmzPdi9+NFS7d>pA20C7g7)^DR=ODe0_ruS(yESkg55S%O zk&2D-I9(NM&wSwfwoyc7>up-nHRyvC(>@tp2n`o0gq*~FA)V{6x!;*wFWHv%z|Lk9 z9H0a-WC10yZ2$%$u4vdGn;qBD$&avWxFMixn7n^61wu(1Da`Bt2E}3jY)S)#$yblb zqiaD@f@m9t_==@vILf^PJZ=u_cgw%DFR!h5@>Kol>Rq^Udse;eSzcT4^s4IIy19Dd znPEy}91&NAnSi4~Kg#Nq;fUb^oPM0;RSh1O24)zVBBs5ULV&Iau5qpKoN5+HIBrZ2 zZoRhX@1DiPx>>(R;oD%MZ5*48c7ubJ`U)AJW{N3p!17@;`z)uw7i)k{S_(07`&~T3RFG3nld->b%BOw8Hwx?xG;g)G6%3H1BnQ`ml}x}QC-xR zoD6(y?omz(C!KK@fY%k(Bz}?&v!cmYI$*I83?8=d2j1YBoXvUX_R0dg@tnU7;2tYPVyuAOq~u#Cim`j4~D-IeZFg1d8p z90b0YU2nJV2b~8m7=eul1oReKK$U}Z75nHB#q7+@?A;3$=7lCtnLn>8k{@H4!G=AT z0y@qHwCR+Y*y*c}ezsW#f1T%TP`w>~TMuGOy$Pf+igxgAQ?~H|w(~5d`V!ph$cypv zAoMXW53{+0P!)(69$=ox3 zvf0m|s6B$DfL`QHd%&mR)ZQ-~e#iFWONLI14j8S0}?U3oMNDD9F0omOjF5BQp6HIYMv#gOvS&1ym*ROFLo=^d-l}k*mk zqcPL!#b)F+%dPK=K1ehc^EM#-3#(mnX!&h$2K(2|YL$a+6*R0Wn)P+&} z=9!ON8*-0anhk;Xe;h8HDt;-I&xBK={8E=!xhZY8J8L83&c4!p)u>oFyRLTOw#xqf zvs5Mfz5mp?fU9@;j8hqCV0{&P0J|>Sl_IymC_$VBpiqNbgw-mJjZ0;&6s6!<vP`l#Z91-LPVQLtQ0y z9B^L?AT!xcS2#xIt_>TB%cIi5AS^GSG`qgd3rZ{9$>oQCKdZ5oedUW|#7?g8yJzwc zB_Mz#o6Cr{g};eUQu=Y!G*l_}o~Z$Y!t$v(m?e|GNL<-9+OSBYe{(hKX;(VuInxNs z`}W?J>a|oi*KM{a(K4 z{TnA__9;;by{oK04pP@gOKj&T8b}U#NVU(GCaS-kofSa^7dGO$QZzsnQGQ2ge~Ip92`w+HWVzG}CwGE=m1^d3!u;V{}!F%>&E` zKznQL{FB9DZMQ*GoEUBczi$3qbT%itG~MIT=Hc5wW=9Dvs$7xyJagB&c;`SGhO7^$ zdlYuWS5i-bB#!3qATRYm?Svz=;(P2T8MtQb_h$W~n57}5o->UjcK)lpo;C2sW3=R) zww?dEnC`_1aK@O)LGY*w_h{pk_yOzfMvNO8KZ_jYa<_yY2dQlFjlk3h1fFA~o3T8+ zo15DN^dI7V%=bs1t^M>NHf9RQOLeE*q(3L^#{V2zaXe^oJWQf?s;c$s)jqrZ{`@U} zb$4Pb`tuLvj9Jc|Qq7s0tFmwUy?Bj&LgJ6X#*h!C4pNGpmC3yfNQ8V$;#@$dT6YtO zK6wLoFDG{=Cx0iT{S*3bq`>e&{Crf|@TZtH?G%GJa0RW!K;mc(#T4Q(TNn5g#HqsT zAxxl>NrS|*7e4>f^UCY5=-dqR5AeOxnJ|CK&`z`4%0Gn*weln_Ef5hekf@Wa~4;#!(<`F}6B;*L>6`&LQ-apW#rX z10NsWcV7lna_uUy3f1}5pEdJ@2o|abh^DW2;EePf5=p#`ci9lu)WP$X8i09ey?_}OW4DX z! zTSb@tb8Wn7*JHy&;%GV4cIDqWNv~VdK6E*k+Z7EcvQipQj`-6aspVRhtd?zAO|Z_O zn~ud}uojtNDR>}CGWhdyNXS=&7fhlIE_#prsuQG(32ST3WPWowrBm>@*Bn5Uo50FB zz9OmooBWLrc#a1N-fmcY3+pE~@LrU-L>a_vhabpY4P^5i&{5QK{9&;ef`R zT4b_?$rLB7PadOSU_30s*#(9wg2VT8KB6h2fW1TebSzjWSxN3J0jAj}G<|s$`m|;; zYOLI=Ykag^CUYgWR zS?0&`E|3D%4>L8^ZKqo-Iqf@D)7r7OKrp4u9?VR45Wc6 znaEc~Bx>~}a)QHI-gqNKhlX(TwDVyEa$48Cl<1KN37lQgxKsQMz_rBuaJf_f8k8!8 z#u;L?Q>7_#ej8f`N~_4BkcX~dc`)=Pw>;bmkhV2xP(w(5`G*^EBtm|=p6IC513(^R zb>0iYWXXJ17*GjEk#|zX_mv&|Osg$ItsZ2pVq$6$?ws@5t3R(_^FzO+M;s+oj}VGp zjzStu@&$unaS|QH)Gg=2>mMxuXoY^KKIg!`@q!kn#^~xlIE?^xS+^-ZxB;>V=>ma7 ztZF1`Xf--HaP5N+*vRHBVQ`m`_-g^ zo{2o)UuCVGqp;WDhj*{dmfn|szB;}=8&!K;T+SE*04u8Of z;1!G*f*Fyjq1}Viiu~Pw4Tm&XMuX32NV1OYIu@5jhJXdxh&U!tW&isAtmVAld{V4F zN(X0+U>5qi%P+(9+W1psv}sjhR8&ng?Q_^MY-zN3ijMXRSuB53oQJMU^c$mLsHMBN zC%ji3x+Xbbshl8ASyAp;q88x;^}IJi%hOH88Vy1D=;&ac8%dlL&_KLEJvSYx!n(cO zM?JgFtC;PPw;jWZ@L2T&=&t>`ANkIqFxFC9wE#gX6$&CthB}+tB+iR&Al6png4cXY z4`9v!Dv)z@v^1qu5i%1ZCI85vDfm8R{>{)-?SKD0~hIL|2>RRdki{gHSdG zqmTLa=x3`)RO))%+rb@p3;b&+gRbdm3(uVKO5XIbxsFvV;7>l@Ylcm}{CJ3Po5Dj(1HN!JADDZ$HHF}HR?8SaukU3Cu_?p-<`_kOhi6CFk-s{`OXX{?cWahg{3GvpeU_BwQcMpKdu3O8WzM)*^ta=s?9V zjcZ`v|FPR8X3mg~4vYIwJj5OF9i+g*a+=rWdEJ)s)o=&u+y#m zWcLdTEvMp0L5LA8XmPT-$?v^D-9FewJ9OD*CbN3OqE*7{GE})TT&dAnrASKM&hg=~ z>$V{Yur$ZNX=RM&*qTeM4Fd^_u zAo|xipCg#ET(mS;fXSL7zze4wsKEI#;VZ8FeEy>T+BVm=GYKfp{PQXs0_YILF@@yE zO~PI#$O5Zyt&5#OhziECg&++92BXOw@J<2|c1CPvp0Ap-9Es$gZ{YtY>ooO;3=uih z-&{fki~};KR2fwwG5}K~2oqxPpN|L)sLJ3U+W7eEv;o8I(`*`ajhAiW1>$g|EV&t}n+Lbd;euD+T0P8U zm&E3;vg#6p$(JQ)T;^W%8`2g>j_XDZ*W_%z14lY<%2a@SqgJNC|NmG}|0UBZ2=@2P z!9xH6?WLp=p@TB9F{kDj{!N5TNX+j;>;<#guK`YIvro911oBU@2>&5wNou-+^St9$ zL@E(;Mcg5xIt&6G!YzUQG+N-zI-&(uFEl_8PTJ&BU@;(TJLy6B-D^6Rr?3vF3_E^r33h4 z&D~Kr>6JU#;`e?93gs%%SV3SpJRRK0JIy6iVND<|nS~q3vJg@06UEJ=*&_Nd-fB;T zfYL}J#o0|DWj(uuDmXs1bbWK@>GldcZd?LJzxmk5oqNdjvi z%MnZWJAc8^pR^X%?O#VZT0#wBDP?5Tzr5ZKe-B%Yr85QF;b}&9YeI_z-%Xd~;V)L! zo1eO&{EQ6ICM(t|fQQ1NYk?ifNr3s~ERzr({6v^n1(8mWGX5` zuffVy#NZeDcN0&5*zaiBjTqJ-9R0Mon6ll7czFMiFqKfLzGMPI1k!7yNL5iRN|jEf zg(Al&E5KjDJst^gx<-2Oz^GHZBBb01rd<5#gK)9sv{6L+tDOJSUERTnJcmfdnd^A~ zJheR5?7jJ$e}NxjA$4FUCvf=M(Acqxfw;&ZZA5y`YbVqS>47dT8kJ+OB# z*F?Bwiw0GWL<~mWX#FCjP+$ONgCsHTsKX0H_d~OtvY5Ogu*?e{ zkDt%GBCg*`kmxZWrCzc%gIWaS&*{@2kx&?crsa|vW?Y(`79ce-5unDb>!RR``Eq9V3GCp+Cy=66>AkYNh(g~3T*_=VGjZi z&s8CliGQWXKT)LKzBtB&FA$M{hJ&}UvU(lBJyRxJgj5i-Y+Rl%Sko^f6;D#}f*{~n zi}wASmfCxUN_@ zFAdPuajH{%Z|%st=95pGyPbsa8H*^c-P`RdKa2r zDqOw}8N6t70Pzf`_j@qV61UMqcK83v-H_rSej?;y&*~okijI*5X&c@k%?Q^BYXk-m zqB>-iske?4YH0c;L6@B*fVxw)eHKs%hMS?cktS)DpOVtb#AJr`u)2T}twv9Mx7A!y zdsrbr|MMg+Pl_X>$=y4dpSKlukPwfS*!=*{H&C=&khtBHi?P(q6C+J zHR)IB?@N55Wo`>zh{WB+KpV8u7-mj*{&8ZDG zM9cuNMr2W(AGA3etDTnVCL?UfvfIWY?_PyG)`M5NM>zwus;6mDPOC4yCx82e#_?GH zkSFDdLx9U;g?kQTo?~}-#^!oxvu=lY3$3;EopsdyJ=c; zLCyUVyI*{hug#Zb+Qf?Z?+@oVw=fp@4TTX%slcg3XaHtbR(fZ9YkGTg`)EunyAAf6 z4*yR`)e~x*GSX6-5F%eNjs3>Hb<$Czfm$>Wx;bzE|mF}VP!Xi@y@ zA+O5)KxP_A)c76KTsgV1zsL96nP{0-wyShn@<%ES0Y_B?BjOYo4m_AYx(R(!Qcbt) zkfhs$)|{7yt9_B zoXG zOC!lkgFZ4vD8-}P-C#HMTZxkrL|J|=yyc$*h5#I} z{%L#K`9bg*N3Y9_vf?`LlW7;K7D~U;Nj^o)U`+*Ue{g^b?QjYYL6T`PV;QMy0pvuK zs8#7?hr4tdHaOy*%*ClLb!1f^9-#@GFwqD?n&JpW;C9&-v_7y99vX>_*vU|~tb@5* z^8Wj$U~uPY<#r{${|Htr_a%RTC?x<@eCauRxVy_B5Oy_#4D(vmy6dP7{&78{j4&Ja zp{$|`SBc*SZ~f*fT=zDiT))^H+AhH02k9t=<1hpUb4jqSMDjIC2daK!?!sqn5X}6$ z-}X~fVThonzkxxWd`KI4LoV=rbN4-TuYnv3o(uKE~XqWI9K(jL|LUc zH>yrXk;8*gn2rjW+Cj;D2*a|V^0UkK%YovZjRx`Pg1%kst`u!x*PgPmj?nqruaG&r zR5URW5Kz#QL}5_H-8C@QKvF=aunr`SKmsFpGO*BdQ7b+4&~8xNgM<{kO%%$a{z)X; zpJk76Fdg~M{HHVapE1sok)_Eo0_UZ)w+Cy=6tM#YfwlwfUJC1EWm7x1+OnDa9c~EL zwdaO@%Qc{z>`Oj(6E~&9T1Jy?vg!h1nj7vxnpEnD_*}3Lr7}X%ocw@}PEY!sxMJBS z3XpgV6BDjc^gnALjdMiixjYXjHCJ)7D&{7n57A1D4;|XHJceE(Tyq>}){5(vPg2JRdWJbkYS{C!=n*Qg2Bc(iCb!j^qK!}kkZ48!p# zbAysWSF6_esIGM_R<)r(&X;An`vN^>FgQ9)9mm+3O^DGr;xs;RT}wYN3j<*C^CtUW zbd`PWBn9c4K;`Kf%$6f@25pSJx1r)lF;>ah(&Nm)o_s|5(|Q38aNAn~{&f-lWpn5N zl`^`0JAVKALjXx4^zDrAGo;qb#_Jv^gemJ-^UE&8i^A52Ouuja)C1M!yS=yyV{qbZi;Mp2NgH0hFaURs3VO7VvU&~s2UEzqjqsm)BiQCHGoc2I z)rGA#tEnuD=qtcSGhGW^p$5lwN@sIc2LC1s|7b4=XXZnfk(g{TrnmIx(BvN8A&5AI z9SSr2N}$<%iOy<=s4uRK<@E3o#@Jc8%2-uArb6L7>##m+rbVH(Ouij2_(3eBJUjY9OV1v{_8cC2qKnAG)0boo&nf?pFiq*aB_SuoYb_99` zRMe|%2oo-xH*Af#1@Yxp1n^-gEWBE|p&BK$WJndIl^nc>e4lZY64dUDIBcQ^i9%Th z2tw}-Lnt(o{I3VrURK87z29%@9!0Z+<$fC!GE& z1sG0_226QOw(G2tMhEOVI@6=pwui`jpkEFE3BvbUp4d!kD(={tR3 zJAMvhB)(}Kob=}su9ap8|c=jN)&K)9p?M7X5o*Xmjl1qw?&zXWhKY!CZ ztWi$my;7FI$8K)=Lh#xx^Jb#SxMGoS#YEoxNKWD{eg>0^QkVCAPw4n zipVy$hY5Ao{?sGNVlPIR2DGY=0x+QPyr0ZW<8%HIMl)dK_;TVgSV`XQUrdS>lES*< zxs_<3qdz}?KkC5VC}YNAD4xvB5reT5UNpiE+IaOxV6>sZMt5x3Ofbnu^^ae}2{1=a zMUQV@fgYB|HPfKA8s#~U_pBrs34>LDim z(ZCiKb}L#GyIULD0k1FCUz(cNLyQUd>c=hP8Dc%1dV#&;_I>wT!|p+~lqeSx~ON#lxg_VlJNcH4jX{1naxe!0a! zvj5?lh7$`_rzOAxjgAz~fkVs;SC4h%(g+LzotTC->q2oV3^B+_(Ov|aWUd6j8lf8_ zDK*?wFQp}~j9*Zes}`$>Dta?`3-ijQd-{E;wI;hGx>dw>4Al;$h||aR8&5H-zIYvD z&`O?0eT%?L0shu7lcf`*6N%K9Zrt*!#buB52o`Q}yeEXEt(=mJr#luiD1nZ5W-A1$hMehHWSvuBz6EOo=}oBZ^1!2p#Ic&kpi;*7ocb2FwnB>C%OCw}e(Un|hY`fnSP&2O|z@wcV) zh0U-xghJzm)Y%10=t4Qb{attfM^^VA#*`jb(UCB?v-mHxM)IE|?avBF=ed>6AGSFA zx@acqnPO)C<-6czZ^#`yLn-lX&2JhQvr!7;3&G`i&3+LWYNA0Ahd)|BE{0GYPM*j8 zwI?NxO9>G3UN1d92E?NIL9QWLm2p7_V3^$5j$|lp;+U0NF`BOds};8&x!WcT9cUyE<6k$IZ7# zTDv!SKFw0Uo-z5Z>0zw4kM72%ZEZVBE8QGYl-Rj;JO`$NXCFDVbsDlUzPc$%5+WGo zYuPWMC2*o*&!kDw`?pD4#|9h&+8t2tA9&aiweN4}^^T{$K2J#pGU!aF%sBsuAP=bh zID$^d`1u4(ZbIUcc}_c05mTV`b^Q82Xx43&G~XB~AfVOM_+esn0MpO^x3#>~w6WW7 z{qgAyam9ZVWOxZgGck6#?TWGyc`b=PnlFMUIpl!&T-;OIQ_)i- ztWWW^LbY5 zew8!v6As>N25q8Au)aAkrWg|Br6VxG27u%3=_{b~`EZ;-TU(p$Tz3@w78AbH5Lwn- zD;qJ1?yyANlINzlUx@7~#?r6i`B0<-)8}M)y-o_#kQ2`ZH-W1iw6{OBAR^vYZ#J%^ zu-S~k>N1Ejsvi?pQe~vAo6F_vB5A8mDZTQ?wrf^gX++WZuf!FcwAyF=I)51ow}&Vj_pBAuAE( z3QE)8a7?Zy}OybFo_F(?!gm@aF0{(zi z=CItFX?_yCNs+w#U1%9bNq0?PCGczG1K0#6+yt>LtFNuMyu!xwIgw?(LaukK zp8%00Jx(ch84!Fuyp02=@y`1!Q*hb`D_L|2WsdBwE|Nq~oVha-DsGVB0i3|L<)?`E z#r{%HYEkDnsPE2S@R1-uQtn9ugvbEJFaqvNKVhZ<#gVyaLtI+^0j25ZzSXep6gO7F z(l?*WH|&5^7yPCZet&UB73sM$tw9%-0Y}=X6w*a3{YiA24D(=?=D_U=td-0(ze@5c%! z!7i6k>>|+eE*w&=9il~v>Z}liMxVWpzJ*tc+iK5G z3@6VeC(X45TXs}yUT*EhJaFo{i4UZA9M$x^yrr?#Q{h%;_lYgAfy)Mu^H|pwvf@!{C*hkdpNqZp!Rl*ixCohn5E?gXrA1G!HkLQGz*ZTV#6Em^kTx) zbKf6%4XxWe>AL({W$}rjDk!n653hOqAlN}m40`4X1e(33TljqD|1x2Sq?;8MyUT%h z04>v@m!%Ke%yt7vMVoBm?--6hsD_SnL%{|hM7Hq{oh174EiH+0njPZ0+&cT)pG`4( zR;)zHiM7PBW1B-;hWXdD8OZeG=(sok^8PtBM5n9eKI~O*wXQqeZNddkE!r$Ldt(}z z5f~{BEQZmHh&|3wtPk?318hCZn)gliNBE&-)C|XO(^>$={Zv=+wJI8^FPs_f2~k=7 z&LX~~W9pd^;loDM8Lb10<`P?nzv%M?r!y*ELU(_rs*MCzZtJ(G9HVju%P<;gz+UvHq7r{qe^_bnhv9G9fwvHV=%of{zGPuHA@o$@XB4Svvl*JC z_q{KhtoL3h0JXn)XrJI?{S|ug$$M(hT}GVgN2x1O>6@oap?K;h8SKneM<9jpTZ;CI zxjXxg4ApgFeiza<^&Wi7K?h|YD>(g-sKDXH!Eh8rsNAy=-`^gh-Y(XJSIQ!T@{fSx zCpKxohq=ZXC>;OdNt6TsN$H=^vg~s2-RrGqs%)yw_h9|~xwyAujXoV*QO53^?i^2i zV_i>j1FcH|=f^Lfk-?Cx$}^_A3SK80L|J00{+NAHo=KDhYA5#D9P^1<1w1dAv*e$9 zZ@;Dyq%`)9)XHJYx`4LyMRIM=&sdyat-tdtK=z-rbyCcWf;?&br;wcau$`x&QM)R7 z;#nV4If)&kzfvkg&~>b>c zl-y!H4&hYF{UJZ!v+fth&jJoNUIOY4J!&r2O_AfHE z_*$eJkcLrIzS%dEO5!p^Tau%`f=hqw+va!>JbaD$I_z}Q#wSQA7vm+4EvE?{uA*ev z%w;!l9-+}2L}S8ga3yM`d0QCQ+<4iFaaV73kJPNTF~u-I-snQ z@u~lk_R(k1Q6j#zi{BgD^rQ%(H=0RBry~GGm=*<=0#Y&p4_V!NPFw!SjV2@hAe#Nhl z+1Nh;8lmLK)RCjfpO~L_SK3yPGT6r6;7Tkpoh>F3qu&?$JFxWd%GcG^))xEfPy#=! zH2G&aJZu^Mh-2N=)ry{%SGwA07(Qelzb->p?*(Z9ux4SG&><9HY#9$$2EssC|8N+T z=3DoL5g->J zLlZh4Z2QX)=u#P(^Zm?l#OzfW7bJeB)w1|+qZ z-F849K-D^d5;H?QQ0vPHk{^U36T)tk#4s{Pxf+tss%<&I@w~NG5i=Ol-y?1Z8BjPC zMVUQo$safJ6GRUQw=n=#cC9bU|Gu)LQ0E=$H>-G|9~DBD5`~kaXg8NO<`I-3l{NzX zh^8rOq5`AnFXh?p-NqF3hfdW|XGP{Ft~;1YKt{A`f)p4nHi3jRq`m;kLRGyShBIU|CA1Iq6=g1-C;FJ$=Cx0X+We~b!EOHO!+a&^LfAEK2@h|R&DT9^( zjGL7-A}6uKuWm2~Nhgm*kSz8dJpbLod*K5!ShZ2h)NDyGcM=(&HvJMqHd%hfn_dT% zCwBo1(yr9bVT`Es0l#orPJ~XnN_w~VeD^i3nCspACJT)P%kPECAQ<3_fj)*rEo+l# z2L$D3E+&16 zy$qVXQix+!TPZF?$nYahcbSSunSwogOEn+v3tkI>uV#kj(`5lxH?DLrcShL&@0<_@ z7%mRwIf!hsHOJdcht(vzo;qp80_fC`K1ON1Tm4qSaMQO?Wzd49v zWKH8&h_}CYpl28l(1K&pDHy3Q+`aC*HngZt2H6RO#HRW7Gelwx<2z8?`3ts&7n|!# zgXfa}7~sXClttk_z`{T_IM77^@MK+P*nAb`Y>LhCMPd*8Lp?!|p$JNF zO{-38xzRV+HQZ+3P+NXQ>-Lj8@-pcKZ}~Ndx{-TL>0Ofz1cZ)^?5a8bz>h^px4~I9 z>zVY4S(z9&6A`-yHf60DJuFBEavEQhepHyJ%oE_|_u_P_iWFUqNX%0Pct7S88ds8H zu08HeH@VgG`9G_Jm3n0)F>K#7=0tXjkk=JsIj&Zxy>p>f23{j{tugFS_|R?mlF!RR z+o`;89E};9%02t=%r+kZ(r(~)$yeFP3hfDLQNQjVO5XL+?*I#$$HivL{Pam1_^*ED;dWcOvbOwc2o6)@VA$5kB|bslE+kh@~2I zQ=tD2EEUs{vCXM7K|~4w5m=i4OPQbRTjuA=RR7<~`~+#CKTUa<$hM8+zJlliY|FjCYT4y5@cQ8*{a>f8>Nh3N1IN z!QS`a9TEQLh@yX-#(Q3>zoMSwYNN0LWBXyU~92#DX(YY!bvQRzZ`LRc#?5o9OYBH6DG(4u%oCDmL?lu=ByctM>r&V5S;Sv*VaDn=^)z>w2b?XRwpqackvqbVysTzi%lB#Gze<3j^;iY#p!1O_n>YO#bJ&S<|d@KTbEL-gWHr^ z&CXzV`5Q;a2U=p|&i1}rAH%=DotO2hbwu9-N0Qo`OT>)|^zZ*paP^inr6T1KF#x~@ zr$gC^)lb;jRVQe9)ea#~xNj)7PMgUxj{9i60S6u(U7LY}?y5*MCpaLS&RHz^#xc{Doo;E~` z|D4KU2+TY1_)V6oV*IC$$;|d&I%b#px$R~v+NYiV&fZ0y`V6gDLN>do!3?Lpp_vh3 z9lV~aVqULb0w+rp*|(6HQzp7oJTp&m?j|vob4wN-SO9G;jXJZ}=6yUomg%XXoG`nw zuO}yW`abY?nLw4fX?zT4O-|XsgiPvZ)>Mofy=lW7Upe3>yopAK>#AMVkkIrmB5@MW zR@UsP?Obo3oT;alv@7xPI_)vbXkS<0+$1J*0!t+a_Dsq53>rou95= z7j93NE&zWnE~vNVm~D)e%2-d6!ftWheMxNO-6$qfI<=naM6mq0hAvmAC}glrU+wob7!c`CcdT z^mMt@#A(kio#Rf&$Hql}S0DPdx19ElG0^WdJOi%NSZxvTlOD8J_ZIx;%3WQfm43Co zGncf{!*qEzeyEQ9s*ctoQ7_-5D{bril^*pzk)~3dg)C~!0_=P-%pEAp4zwke>HV>} zjp||+!Svzi?0YK#WS2`Z>Iut7JX$;zRgpcvBt42=pCHC*vm6#v`x9+=mYy}jjaYF} zS`Z-Y8oDK&uw;pLyp^J!IdoD-yS2iLfSX)Xx9#)DbwRJOu*+W<f;z%a->S4r`eh?7Oq%?Er~XGAZokZmMcenje&Yi5|6h(z}c>W4EQMW)@w84VZI zJK2o$-o=8;{2lRbRVD#_>>+IXDgmhXQ`+g<@?6ZxSv+$f0`AobGrWRu0W@x2z)3|n>jar?=AsT?SyX{{W4JWMlTEZ9G_8CF-V zw5wjZ(~MtLGsHpo861=xqDs$Ic+m=qyd~Bt21H&w*c z_vUV?FXieY9o#eVHprekH7U3#pLGTz#wT2a^5G!HyK8U>L=Q@f;HyCSB=C3Oy zE2NlNeg}Szdm?sOWm-81uhEFz$Mr~;&b3C6nN7{vq|N9{_x%)cpFbmc-Y(l1g#>?y61zv~9RWV{8TW&wn zKPzyAfwf14EH9y0TZPb!DpK1MjHGa2{i`2`zCpikngAg>OOKTI8IU3jf|WSx6u3pW zV*Ux^Jt~+?bdYVqyHyjarUJY(A0>fFN~H1~lhYiJ(A-j>RzxEU=RP%T*QD+sD%@qC z6avtnmQ%x&MCJ2m11f>#jy@YTDVqx`&HkBZnzC_wI zDa|w@l0aO}Tb4Tcb=r=zO_%2D0 z!!u9kN*nQf@-WV|;n-bFH~1xP6+Y@B;2h8O70gm`Jp{^!Qj|6%El07) z3J*lSgX|q()U5-CWZV7fvNk;|t!wPf`$vHd^4QxP!Zb`gzPy$Cgy3>c#y}9+H$gmz zJ)@#M`75Bdfbg~=U7`faXSxEZ?LlW%G&G9di6uXjG! z+-hNHP_V$*fp8SR+#gt{t{-_o(=n#8LLRR_Uo6A5v2cGa!&^q}ki!>%Z3#9TtKoM0 z9P^WGdgs*D?;OaE;O_FhoV_xaD1SIxLK5U~V&}xW1Go!z94xnxP|YmmSZs3Rs?=cb z9lQS&sz*z4k(S_)4yb0-ef_4Meilu|s1;vfW-T5)v4$t*FSIYS#WmwQxWdIEb`r(0 z(==ikdL%ClKY?g?9Gibt!4j_Q6O_nI6v3@pi|*qw6*V!zk%-N&pc?d<4_?au*kY8K z1&~k$13-R=cmlulK&E(Jb^6c1zedegzBBZOLuBRuRs1!D(JrSLhEq?stK=GYG5uI; zxmP7MtyuX!xS|F7p=6X4xMFDxV*j|rwfN)OM6Ba@E!Jh=s>tm_g0G-m5;pk9#(ufC zMIOJx1PRkX;;)lM%ol>+zo!{2MghAQlZ|YIe1JO%{2hi_sWvhlUrz7G*O??q&?i1j z>v!Hiz4FpEc(=O){zu@Ifsn%CJ!oPUd0S@%2Bqs?!V&k6V5&JC*Fm$;5g>@fd_30C zXV@75IW+h_J-x?O#^y9vm0>lE`N~ynJ0|ZdmMq=U>b>aCP8K`nU?i@*RIl(~VE7O= zrhw|oto-BqG!-j&y1YKRV`WeI+_~4CFPOJ(KKH6vY&XzRmhYp+^iLSD`nTVD&O1ML zkrR+K5@jJJe>a4nB=vZ~aF91K+G0ao<-UL1nR)R$LjHMS5o?!x2HEBevXe)6i3z!m zX@@PDqOnt3?hTORuuC9hOCc3|f!i`0x~9hT@r8Y6G>aC_$7Vh)oY?yMA7$-^%24{- zw{aN;OyN6@x%Zh=Bvm3bV#JJl4UPVyBigMW zjVkrag#6?m#W<%VVPCguo#_D+swJVrOex&2hIYCbV z9MvKDTtU51@{TZI%6*KjLCOtj1`RCRLUuUMjI%&S^(P51*P2X$dB;|WMIbVDHay}X zhaH7F2=Qeteh=Qts#200>54b+GchZw(@DNd_;Cq5^#nM7?syj;0F5fyJh_`(5f93J)U z`IKEQ6gl;ZarH0YWwc;wZkV4($>_zwUp$d)HKfw+yW$P}1uQcCqNFhUJ;Z$8arD!z z(Krn0y=W^PnQkry9yYR~x~q!lyQAf*q=SVVxNE-oki zZ+4TaD%uOxrfA+MGO!thdS#fY+M{X7rq#|&L|2r6J`1~feHFnK^DqDHt84*yi+13V zegh$~;Pj_p0yMiKKXq3EN>HQgzq;XBk+dx+cb;JLCB{Pu9Ws@&=}O13&}-&cFW{|# z>7)L{uq1FU(cMHNrpiKAa6PJ6?d=0YVLg751y^l+3NIGP7X4@J&H{6#lIsEl!WV^> zO=Nlij^T*MnC7l+R2!L?1pX8Q7x@w z`LN$@H;WFmP(t=-nbBx+*$F{lbMD3yuX8*BPPo2sub9gKh~jfYm!{1=E~OdsW97rn znKta?ZoK#>D55KV!5~6bARbk_$TcYjgn+4{(L9ORV|3SXjn7we37`v1c7lu8*f5>U z^MTs7eP-hmkd>xhnmp3Zy$7U99fmPn(S#kVQ4BvYhWRDnAy1<`m!;Mgd!7iesq9O@ zB6esU@aAvKc6F!BgX^Nr>kelkB}~2JiE~8GVL}~`tlo<7X^37ebI+PEBdixrg?*pk zxBK8&A!-v^>xS4xKlX8r1V|s3G$Mu@)(es^pR~Nk#YcHtOt9_wF9E5Sg~YVWsou48 zK{?*IBt8jhsZ}A)YDmjIXL2cOHXjziI>$*waXBT+#q4jvN=Qq`l#0usS%*hI;eaUd zDM2$D^mi~_>u*?mZ|4vuC-nx6iBGUU5m?xVz-0+x%Zw-BN}UH6!weBV>A<@%=G%fs z$QMzw$7N5?Ox`wx5I1xVNC*&1%H%$XdTC|rfNV)#>JR~U3-aL2({1-!&>a9|SPQ-G zPayV?k*Eh@AgxwUB%RJ~n&t4r`5@wgX_bnfC2!*Ngh;GppX{W!5mjeJTBNcXj^DsV&$p9U91b|JN%uwn?ek>+gx9>r9iO*O@CuG4&cM zqfXAbjowttV+T1x5B7!ZBj^nTk-M4Z?i8F|)KpXb7fUi7b=s2UQV)MX4p4w9CPhL6 za&Eq6Cf%N+QDroI+`}$p`hVwd|AR;U^lV0NPPH#2k_CYOpVE%){NL%KOwIo-?T8z+ z7g72x$d&$Qx`^o~%YTs?OX@aue>jmoV;a8<*tzHkZ4#Q_3c7^K+Jn19*Ha>z-Sp%l zWDJp8B(oZ_>o-q7-=edFAV9jLTJ#X0?Jv@AU((HnK?fRmru$s>?hjH=(X;_wSMQAl zuw$q`c~*9Uq*D@7UfujT(>^`?K;HpeS*NBez*4}^@RJ0x#+}eDs+s2=nI2hh!0eo7 z4bk9fR7ls=)|4^N8~cYhU+#{~QIFiw7GI|a=o=aN{^=zg+3O7k)T?+O*rNx!!U>nH zR8c{{fyVBxVms)I7Qt}@4PkiR_j1-RDKRjeLag~T(h%7(F}76ApF3rn{Ts(#a4U!o zuz7}r5F?$*uvq=b-tGL-pBe$RbdJb%vUFfsMHJGYXogwI>K|krZ#FkMk8(omOI3o* z)h<>X1@qH+;&_^|I6?pkg{b_ls$+xUiJ~$mCVAZE@=u`|IFB-`am&Z00wKI zg8}rs6V-^-e~pM%P~a%X+=r1`lwO-`23TPezVoxJXrYmrIJ2h^%{m(_6-w18)J9TF zJckg6Q794(0~$l>cIM+i@P-J{4+MmYbh9EAFM*ae6y4jpzM!(Y)cREJ5fn1YIc&Jh z!%lt7!MUt=;8Q5bv$`vIpI12+0Hql1l<_OAlRsMLe}DY)4Nkg95903OWk{T=xSwpw z3Tfc1p-Yb8^fZ5b15LD?@vPielBY$+=fTY77H%0AuYMOLC@z46H>eANXP|~8JT&kZ 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 diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip index b7fdfc1bd375876648ed59f349e8642918064161..0ef1302528fed7b6d4d62ea515a7b408a859d2be 100644 GIT binary patch delta 940 zcmZXSYer0sBaG@W9$O|eN(zobBYHd>svgtPMJeysl7tZ-T&;S3N_j%8G&&><6(K?yT ztQRAqCGYn*d?1P?8C zPLv4cJ_?LQP;B7=E3qNOdK*&7aM@rHDM&hx{!lPehbb8;<1H|Of^<7hg{-z4$cP~2 z^KCe(hTU->k%U(cltojp?J3d(aw?wT3kl{Do7 z@DamDS+(U%=}Ak)>6(;0ZDy81n_N|1qtguK4(F>>{V4;vI>W)7M~9}R-+rWOG-lPH zURPi}SJ>N^YaHBa9L<*+4F$a_wOZ9V@^)C&Hz*{H4Cpnl>(%ce`F*ldezFSFJLhZ{ z9?+gxYd6N|^BQ{4vWWuaM>I;wdH6Ntu&Zt~QNG@TX)0Le#of@3Iwp}GMUM9;b`UrE zu$y?)hb-cK9}L9rK7Nv%2WG>0%OXE4a{F9ZuU+KO9L!X|!H-?UB0n;TxBSQ_PWy3~ zs0$#6crAcJqB{`ovo{#lF9wl8`pY2Fi1R^Y6SL>TyfP2EKx||_T(4ZfKFW`AF8}Wj zvBwKguKe?7%z6Pa61uH)rmU5lD0i`*1*qs96Fe8?Jz(wKh_SB~>AKj}qEeW#XNy!} zxANqYy-7@vQmaodqFiip0dZNeZv1-{swymJldUJLOZzEIGl|uW#k_kdAF+J=eS&VV zRyX2Uk`QXk(gjf|UiN^cc(6vk^hK@Mg%XC3#-O?vNdO)AlN*i&+%j7)5)C?=1+ze?Q^%g>YHg^h23Wk(fE)$_4e&`C>o4JrWlS_-+)m|tE6PD5za3sH)YFN=I4a+| zVKPVE>BAZduli7(KqK=J@(e~ikMWa&djM?|%n=g-D{}8CDk%5^=w(}#GK3Kd7)Gm$ zM#ooNvoVtX+lr|8Ae!lS2Jwdp*GF;JYMM2U{CGxAhOm+B4q*%VF@zmt+9dXn-bwv3 znuAf_J{8dqNBJPi$tX+1a5Mi_7`f!TFp5a$H1?6Fr*V*cIgL_s(F_ido|(vV24*b1 zV-|&!x6LAtJU5G-~P9t;?>dJ>%KnukkNz@Fcr&{}GoEVV5D6 z$BJoO7@F6huKv8&qnw6xa=1)GrW%XYE<>)O>(?&2eyJOVOsC(^@MZPZkQpmErgwAk z?Pt2@n7-#fB}pxTT+5mQ$W$3O3e`1=w5)}5{_T}TB3_6W$wH)Xyx6)w2DNn@E7UNg QEipsrOMjm)|DZGe1Kdvz1^@s6 diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index ec8bc0c2232..7ecb94e3fec 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -15,6 +15,8 @@ WEBSITE_HTML_HEADER=Addition at bottom of HTML Header (common to all pages) WEBSITE_ROBOT=Robot file (robots.txt) WEBSITE_HTACCESS=Website .htaccess file WEBSITE_MANIFEST_JSON=Website manifest.json file +WEBSITE_README=README.md file +EnterHereLicenseInformation=Enter here meta data or license information to fille a README.md file. if you distribute your website as a template, the file will be included into the temptate package. HtmlHeaderPage=HTML header (specific to this page only) PageNameAliasHelp=Name or alias of the page.
This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "%s" to edit this alias. EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container. diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 8797020a717..d16e8661390 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -184,6 +184,7 @@ $filetpl=$pathofwebsite.'/page'.$pageid.'.tpl.php'; $fileindex=$pathofwebsite.'/index.php'; $filewrapper=$pathofwebsite.'/wrapper.php'; $filemanifestjson=$pathofwebsite.'/manifest.json.php'; +$filereadme=$pathofwebsite.'/README.md'; // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); @@ -855,6 +856,11 @@ if ($action == 'addcontainer') $result=dolSaveManifestJson($filemanifestjson, $manifestjsoncontent); } + if (! dol_is_file($filereadme)) + { + $readmecontent = "Website generated by Dolibarr ERP CRM"; + $result=dolSaveReadme($filereadme, $readmecontent); + } $action = 'preview'; } @@ -1153,6 +1159,33 @@ if ($action == 'updatecss') } + // README.md file + $readmecontent =''; + + /*$readmecontent.= "\n";*/ + + $readmecontent.= trim(GETPOST('WEBSITE_README', 'none'))."\n"; + + /*$readmecontent.= '"."\n";*/ + + $result = dolSaveReadme($filereadme, $readmecontent); + if (! $result) + { + $error++; + setEventMessages('Failed to write file '.$filereadme, null, 'errors'); + } + + // Message if no error if (! $error) { @@ -2529,6 +2562,21 @@ if ($action == 'editcss') //$manifestjsoncontent.=""; } + if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + { + $readmecontent = @file_get_contents($filereadme); + // Clean the readme file to remove php code and get only html part + $readmecontent = preg_replace('/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims', '', $readmecontent); + } + else + { + $readmecontent = GETPOST('WEBSITE_README'); + } + if (! trim($readmecontent)) + { + //$readmecontent.=""; + } + dol_fiche_head(); print ''."\n"; @@ -2623,6 +2671,17 @@ if ($action == 'editcss') print '

'; + $htmlhelp=$langs->trans("EnterHereLicenseInformation"); + print $form->textwithpicto($langs->trans('WEBSITE_README'), $htmlhelp, 1, 'help', '', 0, 2, 'readmetooltip'); + print ''; + + $doleditor=new DolEditor('WEBSITE_README', $readmecontent, '', '220', 'ace', 'In', true, false, 'ace', 0, '100%', ''); + print $doleditor->Create(1, '', true, $langs->trans("File").' README.md', 'text'); + + print '
'; dol_fiche_end(); From bb35d9be0ca7e8aec537075740a618d2e25f0bfe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 01:50:01 +0200 Subject: [PATCH 513/798] Fix copy of templates during activation of module --- htdocs/core/modules/modWebsite.class.php | 22 +++++++++++++++++- .../websites/website_template-stellar.jpg | Bin 0 -> 106795 bytes .../websites/website_template-stellar.png | Bin 280585 -> 0 bytes 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.jpg delete mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.png diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index 24a929c82a0..cf4623fdb3b 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -158,7 +158,7 @@ class modWebsite extends DolibarrModules // Remove permissions and default values $this->remove($options); - // Copy flags and octicons directoru + // Copy flags and octicons directory $dirarray=array('common/flags', 'common/octicons'); foreach($dirarray as $dir) { @@ -179,6 +179,26 @@ class modWebsite extends DolibarrModules } } + // Website templates + $srcroot=DOL_DOCUMENT_ROOT.'/install/doctemplates/websites'; + $destroot=DOL_DATA_ROOT.'/doctemplates/websites'; + + dol_mkdir($destroot); + + $docs=dol_dir_list($srcroot, 'files', 0, 'website_.*(\.zip|\.jpg)$'); + foreach($docs as $cursorfile) + { + $src=$srcroot.'/'.$cursorfile['name']; + $dest=$destroot.'/'.$cursorfile['name']; + + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + } + } + $sql = array(); return $this->_init($sql, $options); diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.jpg b/htdocs/install/doctemplates/websites/website_template-stellar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66867384b58e4b7ba3cfde11f8141db4a48772bc GIT binary patch literal 106795 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�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±UQ+p((qovo(zby45@!--#qg{g)rM{5N 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
`{|Ly^+Bm=<9fM;gJI2~rFdF{@we!9~R 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 FngC Date: Thu, 15 Aug 2019 01:58:22 +0200 Subject: [PATCH 514/798] Add shadow style --- htdocs/core/lib/website2.lib.php | 4 ++-- htdocs/theme/eldy/global.inc.php | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index e622b79bd2c..48d192843d8 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -345,7 +345,7 @@ function dolSaveReadme($file, $content) /** - * Show list of themes. Show all thumbs of themes + * Show list of themes. Show all thumbs of themes/skins * * @param Website $website Object website to load the tempalte into * @return void @@ -421,7 +421,7 @@ function showWebsiteTemplates(Website $website) $url=DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg"; if (! file_exists($file)) $url=DOL_URL_ROOT.'/public/theme/common/nophoto.png'; - print ''.$title.''; + print ''.$title.''; print '
'; print $subdir.' ('.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).')'; print '
ref.'&templateuserfile='.$subdir.'" class="button">'.$langs->trans("Load").''; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d0a0c5958ef..b05968356ce 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3020,11 +3020,15 @@ table.noborder.paymenttable { height: 22px; } -/* Disable shadows */ +/* Disable-Enable shadows */ .noshadow { -webkit-box-shadow: 0px 0px 0px #DDD !important; box-shadow: 0px 0px 0px #DDD !important; } +.shadow { + -webkit-box-shadow: 2px 2px 5px #CCC !important; + box-shadow: 2px 2px 5px #CCC !important; +} div.tabBar .noborder { -webkit-box-shadow: 0px 0px 0px #DDD !important; From c92488986bd356a3394a3580783df813e9b25519 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 02:32:07 +0200 Subject: [PATCH 515/798] NEW Can have a preview of website template when loading a template --- htdocs/core/js/lib_head.js.php | 3 ++- htdocs/core/lib/website2.lib.php | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index cf8557de961..d177e7d99c1 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -856,7 +856,8 @@ function newpopup(url, title) { } /** - * Function show document preview. Use the "dialog" function. + * Function show document preview. It uses the "dialog" function. + * The a tag around the img must have the src='', class='documentpreview', mime='image/xxx', target='_blank' from getAdvancedPreviewUrl(). * * @param string file Url * @param string type Mime file type ("image/jpeg", "application/pdf", "text/html") diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index 48d192843d8..cf6082f3bd8 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -417,11 +417,25 @@ function showWebsiteTemplates(Website $website) print '
'; - $file=$dirtheme."/".$subdirwithoutzip.".jpg"; + $file = $dirtheme."/".$subdirwithoutzip.".jpg"; $url=DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg"; if (! file_exists($file)) $url=DOL_URL_ROOT.'/public/theme/common/nophoto.png'; + + $originalfile = basename($file); + $entity = $conf->entity; + $modulepart = 'doctemplateswebsite'; + $cache = ''; + $title = $file; + + $ret=''; + $urladvanced=getAdvancedPreviewUrl($modulepart, $originalfile, 1, '&entity='.$entity); + if (! empty($urladvanced)) $ret.=''; + else $ret.=''; + print $ret; print ''.$title.''; + print ''; + print '
'; print $subdir.' ('.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).')'; print '
ref.'&templateuserfile='.$subdir.'" class="button">'.$langs->trans("Load").''; From 14030affe59a5ed349dd3ed793c0eaaf1d2aed5a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 02:57:00 +0200 Subject: [PATCH 516/798] Update website templates --- .../websites/website_template-corporate.zip | Bin 2297147 -> 1721234 bytes .../websites/website_template-stellar.zip | Bin 197333 -> 197324 bytes htdocs/website/class/website.class.php | 4 ++++ 3 files changed, 4 insertions(+) diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip index 620f2d379c4b371c74801f5dad724329fda7296b..e86e11df2885d4590449673680bfd555722e92d4 100644 GIT binary patch delta 361812 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®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

BC%l`B85n3peI>j&L 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

m7(!n1WtR=hKR5
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
nCSo9Eh0RPs*B4anAn-$p@r~

delta 942246
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

f3jZaf1l%}`7-#9lMS1(ck6tsiqK+YKEjwO zm;dCdJ-5ebg*$6{n1<+7C6sO&;>VoW?n�c`qx4E8kEak?PbqxjVfVG7-EPvqli7 zCt*P7ysQU19s$9m1U6K@xIn%YmkXvI+|@bJTnv4UHm%0RtmV!MvhFp;<9lUXdr$9=VrQ31At(S-t z1I$luIb3qu+Y0P=V%PLht#2F{w+j0I8Sc`T`Zcm|4~QN6%WWXk3e>Q=)iV}{6UFL>w~8vOd#i^r1}7UHP-jmV`=5k zW-pT`JkXYRfpyjxIg0o`XG+CS7wmiM5p|d?lQs%L3 zw~X}yBVtd4j-b;M^Ws=``;&eN6@-UZfes8XN8)G3^_SalA3l0Qxw8fpp7) zczaS5_iz(uZ_z57)^4%22T{ity&S)cQ$0TBG@}c91@Px<1+AZ6#;7 zk6O{>s!gOX0cLqZCr4phvYXXRN`KT!mP5o?#7{~I%x$w=*JU33S|gsH&gn6B>&uIC z9M+#^rxD)pcV|Js^#DhvAs6*UKrCZE0-7?U8r8*?dJadMZ;GM+6bu>k|#~)*gL~lOD zerCBJ!XJX;7xcVp`ze^Vc~T?CuXXcpHBDiq8z6|Dc*WN?LHSejO^qIZb@^$Hv&A%m z$^h?L^#f8wu~d(6PJhMPC(+Y#Q{i$(+5Mm^A%PZ^T+UVpFe$B048RA*=n+c}c(XNT z_PYEXf$mB{oDu>n(M6l7b|rU!M(={DBwYPMqym-7&l{-D&)Qky?M@#%<3`byu*G%F z$C10av){8j29aU3h%9A)92JS=uy0WGW&{OAPLwsf>xE{aYN!zUE7OAJ5TCC(1(X2a zMH3{eF-{kE(gr5>jHM1#rjAh!O1Wpn7I0*JYH3&SR>cMdTF==O?S3{N4SB`m3DH@{ zQ+ah!W4`TwQA)eKZ^F5y$80O$u+bNTGtKfq{CB-5@q z`*RbJL1od?A5LB73IVr%nI4#7FrFp$Q=A==_G97aD1gm zSmFa6kn~bf`e`mR!gfdPcNU{GhXnCi`@LLsFnU+nv4sv5DmLT3$L&7i%nt5XbQ}gc zN*t2=!0ZWs#)!j>wOlBA9(wWLWY+(YCL|X9gnyDYc4^yzfkmB2_SUmKt`X%+$@p1Z zw1*;u=rmkU3SL2wl96Hyr`GVgBSw}(=6MZ-aNnJ)=rsFe{VX!i$E;IkPtW|O=7XQDd>AK-z>%Y_?IY-)hnEaCfabj2!BrUKoA$U$kolj_+3x1Gn--fD zm|kmt0$!(o2Y-&xxd>w7l=Ng@WmP22s!AfTA2EIetv$w{XxfgeeIFs#5bl5tw0#u~ z^JkV2m6K^xhAyG<2bmz5P{L6m9|fbRUlB9!ZpB@({%UF$ z7dusG^5`YL1(s+M@xhVQY z!N(6u!hg;iB1u1{b-?~QQ8W^+*++<+^z45 zZB#6|5`0&C1E#*fG;k`-fYr-(vB-3PZ4qw>upH#cz#NBU?^+2I175;D8-*Aor1++G&++->MM= z$*0)Sr>NUzx63|T*xgPVM4G)_?xrI4v{1NEL;@P)Ko&2X85ZrVtj<#RAu~jOU(1I9 z{}b%he7i$yIiTc?5p(tTJ3<~C9>@7_t!`y2ZUae}V2Ym{jBc5`#zXdtaGBEnQwm5T z58H9m`5MOAZaGXju{vlymw8WDB03&l58@8im=}`FRC_P{z!de!wOr-e3JMJh7@i)^ zg95SIv+yrj^zV7B{2&a!QNmS!Pb@XLr=S}`j_Ywu@7s3t^B@QG>c2~+(K^X5X}tdZ_ppHB+o0NeZ=^xr zHHJY(wr+ib3KcC7{E1UA^U{x#m&T=x`UV&@>qJKEq=z_9{c~DhU98`K&J0VxZVSnV zalaCfYse-%3%`!1j>P0XhgFH9D!|tQV>YTP>VHo?PCMV!DKyq-9^hbOR>^VzMnW!M z8R3Wh8hV_R!+V=qh*vc_gi%HL-VMzsB4#$x&j7xdHw<=m;u2Bc*kw24zU={sk_984 z^lWt|e2&u4+;CHzWD<<<&#cTGj6Wyz{KIFTh6x+)Sn1)|8r5`C0kZo+56_|fPV zee^ib39M`>nCHNt;#0nroWgYFNI-q{eebLl9)g{W-E_?0kwF5zRtyU`LR7++rV

e@M2kDPbn%%H}I* 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%0D~Il$Pv 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 z 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

7wcT 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%0D^8kIwzSm$5+&RIgTy8N-Q8!9 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

;yi6_w6^xS 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≪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

*s%~1Eu32?r1~x(;CD+gZ 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�?` zM%lc*kvVy~oUR`kso|Ptb+Q9&!LA*D7{1!y0kTFEgk9JxuY_wQ#kb)xc6jiOr~+fNPZ* z1mZKBp(c#WjvM_=^oR-vLD@Aa3ReLGiqsZ^NVzVg82%^gA3PM5meg5j6aEdZO( zhtT)t#QR%D_$t_S-_Jns$MsAWnPI_)pjn>6!dAtXkAsKQf9IhJvRFWjWzZ}J6w1VF zl86~Ib9_zqimCoQhNxzc^NE;$V7;?x-5mwC?EeJOFqCG@-WhWyb>7loMrOADXIFp2OSD5i z&)&|0FXq5$oXW zrI@n!W^@&V@8-x=_Fvb3@F&UqJCO6FQS0?H5xWraN<>2*F-CVrUHNBe05PUC2m=%( z%P1lg5iC<~4=@iJRKf3EtIRe;jA~-1?x&!6^<(^oVHwngSycsBm|7+*i-IeM1nsYB zaZ~d;WMInuu(x}GA)6&;P|J(95L*EidfjV2s}@E>=|7VsE$(Z7Jf8oy|B=C?4b`YJ znfzTyJ$ZvKkD?h0nOjar5{>|$EfNlNBpi4-cgjKrzYO$~83MB%UeK8|A%U44e-p+b zO2;n5o6ilGzLSATz5-b7D#LCUT$;P7hgv|`V)og#F-=eWuu}FsnI|+4 zF8?8Ui%D7s)!e6l%3|t{o~BQMF=7?R>ID0A&nw}u*!_=A2+=V+4|kp|^R@Flm;l{8 z&t8zj$*7-SrZ0gI*B3+A%6#yaq#=l#`A+N@fdA@7Rwv*U-u&XfJV)>{n)Uop? z<@G#I6xg!b?S|;d{d>nKh|t~*qxk>iWHn$%4Xtf{Kkw^*6H$0Sxnq`9zjxOtLH=E% ziVE@B;>l1&Apyern8AfD_$i_~IRU%s+YnF@biPcy-(CU_bBEeAv?KB#SUVq$BXR0d zXlCa~G^Eo>vvIuA8M;0Ov-Mig`+Mb>FaDH|QvkV38}a>~umAbU+`oq>hDKc72sBpa z`FzDwE~OHGN`qq)X8}(~$8%9#a9z#3>{rat36CL*ss|z2_H});KA7eOd6a~{$GE-y z>yF&(J;QFO2gdDQo58yA;&g4rFA7Ns^5R-aeHQBYSbirEq+23Q0F!b*WhfCfPZ0D- zU=-ZkVpZI?-I>k2jTMnZqk&wfV;9xDdH1=IN!~?&369n?1Z?J|OBcH|$^(;=^Ugd2 zC@ zrYi^}Srbikgv1Ap+}&gL7iwNfduWbTQArvnY54fhMj?s=`!Z&ZJ~0z({9W;YQ`H5z z7da$<*^Z+NM;Yz*4gz!B@GYak$U)O?u(}o^HRa2NB%z8buo#%@sq+Ru@OAY8X{6U} zD&iSuQ8vPglD*M(+Ii$`>7ljW&D>di^0W|K2XW8G$A?T04tXQFwx8F%>en-PT+e*} zg@?(T$7SnDv|kao2e+=8oA-RJiJM%yt{`cDF)Tmms~}HQ(0Uo&5ZIid7#u*z9(Ehl z6jfY_X1$_N%87@|&zc-P(;j-XCX=r1*d1sp(Tr(uJt`aXJG`f7C2irT8dUY@npie% z9mFmEHM8XMWAz#YLRaIw>2G0lEw*>|&1{|CjT zycj93sMsP}a{0b^dBuc@sj9KhqZ`KWuuDB|Azn}f%*kFsCF{0|%kSvAI&u_IRm*Qf z=`WS6;n86_Tp4kcR8%3Q`je>o%!OH zOB^0nkgBUo6{fz~g-Fy8l!9lJ>fr=`XY=tn&TOD1WCoTR+E7&VS<|xiv{i-r1A%3G zF11H_nGQNu1$*+Un;XhE11eVV!d>}1?UX>!_j+zU+Q?=eLjeoM(LTH*dFE;dzP)qE zO8f}4^EGj`j)oj{5f_JQ^%y@!KtsFJsvh{Cq#VK1G9oQuK7oV%_K0&u^4a!(lk}I! z9zSJ;=Pzy?pG5W$id5Z+*~qLhC0WsP?|fn=+|D2TGZZoBV`HY=l40T(={B-xjQHcP zekI|2bK^a}1%GUxDgTMa)N~WM9h2~907YK4~n#aX}V; zdy>?-gc1x)Cn*%x8@hkUBPh8WNt)C0{7Vn~JuC?S)Z+Z87KX0t>iLvD+z~LjKdt^~ zoqOnbwr_ldM~9>Rj)(Q?WU3HUHHCKi#lq8Tjm17`SAyH$sKR#3JoRoMZVM1(9eZJ73C;FZYZd8)As{^ z&Lhf%sx4bLd%@ zh!cmyrfz>MY)mWhG}@o3+}YlLy{Ty?7OvT$7_Zsh?xU=~3>-sz7nzLWb@8r`;$(!wF9cuRB;gRv&r~35M50s^yIM@!|1=Fd2nr7C@>7(Yyyyr7e z0i`z^dXGG9)|aJeSBQIhNq-F9U&Xk{tAZI329;;dHO_w+RTXXs7YY_>MjhooI!oG+ z|8q2?eei{x$U)m-9Z8X<(jL2CFMZKUPa8!O>m74HHHIph`gbZrp;Ed-B`>Ggj6 zkpBm=BTJMiQhM3W({W8JHMIzoAi@A<9?|-zK7qh07Zno7J3CuuzVzb)Jkemo7d@yl zXo3n-k=|cbWoT&QQ>Pr{hBvf;Bp)tzE)UAevVT;LKuG0(i`;ctF!HkZ#@8G`ngt1J z6e$$icleN*Wfq#9ti*FzTB?_O)!|RYi*NCHM3*Y-LLmls~ zCvDlR)8+OE{b^>ihlj^G7vwK+{of13GCO8xOFva8q_t`vkqPhWMUZGC%jeriok@K& z1&}X@8PZUHfv3BFx1I#{kbEEVm|a%#CdMS-t2WLq710z>f%7;UF)mJY^O8-^at2J? zJj4-b?V|j1q~W+%S?^!in|*3IcU6bwe5b03vX7A6J$jAQ=cX)}AdB(85q|D!(Y+a4 z)bTmTUdZ~H?$@S4!nR#Pou7sS@6BZ22Rq^ZAZ0{OQPsJc1BX9IecKI>TjjcYHgR;&U0B=g%b}ois+J(qLKjwWvHS1S?3Vd zad&N@Fg1F2hM!;f*uab42s-!rMBy;-QAW&~44ZU+ zr}aNSN4@9|r>Ij!fxjIYef{dg1L4l>AZXU>H2)-VB_)Jtprfx(%;|l$HY45i=gx$v zx;KtaJ>aC0(eDGDi3>gz*)oOcc$ zefRds*`tEP9v*5U1X~oMUc(ok4L1{*k!+gykN$5RnuP2jRRY}%c=BY#2A>^}m!8+d zBwx4i*US%qYb$sRR_V|D?jYxMWo+a?{?A{u*73HsQD(RCa3eRjQIq2b^8m8Jev*>c ze{_xxWXlTg__U9c2M_!D%=(vqo_-9)&xjsB;3Q$BfeBqu5jBfdQ=a`aTY>sifo)TJ zxBTM^;tQNaH{*Df7tRx-%GCu}-~Egw(_ks>m?Q5I(0Frgd}m**?773m9{4PDP?}F& zos#~rbjAk=n2bP z`95cVCpw>#YE0wjdwS#9vv$G={fx!t*~w*5MI>1C<^-aukVw+h^7s0qb59?fKU|z| z)=ua#jUHr%`c@biKwB&&DUbDQ&}2y z_0-PILIfQ(Th-WT=#D&pOmv6cm+w2%IT0!G(6^YFqM~;OW%0DWb&alMpO!`4)9k0!KUsgy&JqcKE5+AU+mJmGW@5=5 z9kfBzYNm2f7CMr3xQ*dOgA(nuGkos5duYfG3KU8Sq_E&5cO^ANZEZwxI32#;;(8Kw z9@@>nTWK`?#>Ho<~L^@(H6hy9lkvZCFM`) zH)#;$RblPz9ey{ua*6g&V&QOIg)&J=qscVuBpOyl^ms^rhsh0L!|=z5SK;GV(j1XJ zqCz*a$x<11LSl#K&R=QLkbS9eJ{oj|sMDM438Jk2wf=ql#cS~6In^-=ItP-G$kgWsqM@yx?e>~+N=iylMP_v0)PR$a zB%dH(T6 zFd{Qocb}t^u0rWdq-}rpV<^$hY{tjLcQ!W-^yV8xT92lqo3eOW?wAi*O}Ryu=9`|G z{OsL-RXG6!kzC(Jb~FN)YIfP>$ef*7S=LpicyAwQF}ldOi(Yw&s<(7%3qxLGh2y5{ z!qp-1VnsdAx-$KtN-#qu#L`8t1L?)tGoA-_jphQWjqwy+7Pkw`kVvR_dTIE#GAA&BC8us!i@_(|uz8i+`tv z_Q^97k_hzCLa5Pzg9gD4vrW`(mP~A0`M$IZY5h3A@jmSRV=3z6!}WecD-!LBzg!y+ zx^Oyq28DiUPx6mw(sD#sRmpaptyh|2ErtAP&HDS+Vd9^m=^!lIK^28CQ$-$stm`ER zqU*($v$legkpA9cv((htpb`+OV#Zxj8^Up|zAJNHD(oLKYvvX*kUn#BN&XJws&dIi z;)2V-$g1!NBrj>BbvvS2=JJ8B+qZys_2bH-tca_<$&OJYOBV#4TMukR8<07KUK7{l z4)$F@p!lxSn~7~gJ;^ZRwCTZrFHa<(L~*tKh!~H4=k7*pYdld=QRqPQ;)0WQ#({LO zd6n+7)sUC%P|4RPciP{EJ4anB{u7^#h(DrTY(2Au`t&I#2DKKAbsFAm)nESS1OzH7 zgWGCmk?$%5wgaKGg&?a??wGZsHHpTzo?lrh_Oi=2`+CV&Wv^FGmKd~umzx&^{V1#a z-S1V{GSO%A$lx;#YV*6^p9y2AM-v}%c`X!T`LCr|$5-S_PbhB6Ez-4stiWPjf(Or| z{>k>U9eGJ!+kc@M{n?;R; zpMTQ9)pa=47(7ycd-Xu|POwF?->6PS~8?Euf%2U+{OK&JXLW*-zofO^zb0`3JXE{ zq;T1zNlPvp2}@5E_*8zd=hdxWBg}{(bE(q%+e9BemK&pgoD(1%4_)hL^>0}`rBuDp zzUwu4K+<@SpH3Ytivq~1rGT%820qK46rN?O($oad3R>Uy3Y0 z;i@+Ch3WTmN9#vTu~%h&MjO;Fi&B4Tw|;L}!6^BsRg_>Jhh!i;=ZW9~dRBQ=@cHXY z)<~jV6gC8Z_*P&4s;~Kc>kd~DO0v})Za_;$oksLrp$-sxw?LlzcCem?hbWVCQ6^sWOv8C9*?V7=a`** zCEW1;q3SIFqI$x<(WSe)yO)-dmXc69mXcafU`Z+IUb>eQ6eN^xkcOp8rCmA|B^IRX zF8}wv-~H|Z4!dXJ%*-=S{btVmrn-U2qxsB5+HSD>QE?a;EFg_wr|$dJ>NJYBmKH7LtnMMSvwawXJZ1rorGXa zkj}~R@x;WmutH~Ch(b^Kl>Bn(5ed{vFdZwkQG|^?DAPh%!^^hwp|_^N8l18D0n>1m{*^n zV_)Boxa*-iB+39r-$gDA->n_?|F(613#QaDmqUxd9-uuwXc!hZADrT$9&ezDgGOOe z6TE>G(4M+u;QD8*PaIDth@*h+yVV)defeR+OTuAJuOdkh@*@ZDEiA-i9Jq%i+wT9cEVulBZ1QLN zwEn92-7{`EUd$MI55Rd3v0~fTzfqEXh~@MYp$`bCr?*529Zb1Hmy4gFn&)8V)Cfs8edHHQFqY#B~tAg#lYBYjo4E?21=YY2 zxUu2r6wACDKm%^wKHq``;Dq-E>=YD$GsJ%Un38RddB&y^ON@Bue{UhLQGG9Krl=EA zakpM~ZXi(754ae5n%F_J!2oXSb7gd;_4oxH$NkQJZaox#!ddGEc)jxXLr(g)kTItl zySwIL!&iTL_J<{PwtkGS`++ar3f+{yX+tLwniLRH^zbcxAMhd7kSp%XVd{#DQR zjBSu@YhuX>*9m)Ejs@G_KggQS-_bFMjwb@yL;Z7g4U=^Zog{VZzvm{VbQ;DPSi4H# z@3s__%glCv)qywBqD0w5t<_zgMZMv_Q}n~{qQAlphbs_-39Bl+t6N0cGo$otBVn&B zW1;T@g`I_aGY-<9UCgRv{Cqjk{v$}(*Jil&W^3*S*KLe#$TnR$tk0$eBK>>Ee{sIv zcZXUETxB>87*0Lb#ewxE8O*i!(e1@+V6F=->YN?nQ@0! zPZRew6)PEjSRbBhgeMEZz)P+%D$$grX0b7Dr*RaOO+(Ge;6l6}w)I>dVc_vG3cI3? z)r+csLJTAhkF=PS4t|S9dIh_-o!%%agRo(i3f9vkR=^)N@kN?&qij9j8h_CYqA*K+c zo8Ew!%#YXI?rI(BPS!GFt0&Y6N?RR0#b?C%?iTWaH>)4IM1P5Y$oB>c ztxPCuf2-R_-GKAqd$=>a88UmG8<%KrzWK*lg#)fZ8H=}-)Pevb{KsW1VyRoHr8hFz z9WyLy35eK*3rf378|VWnXuX_?m(TFT2RNlR2t z4C?n1t#UCI_jB<{RO4me31@bCDIS)y(K6o0*6T0XEjlq&tdq-lVnCgs`o4pV)QgeX zY4p*gG#@9K!w66cqvKeNO?a=k{Fh*>&|Xo~Ubi?e;Y$9>Chg|lzierLr^~5>*_*j- zf4Zwsq56c}*=rJ}4bB;o*tJI?DHt?Lrfs9;h+$Y~zB%QICvUSL^|*%2a{@_LP&hW< zOO>Hx5-hpEd~IE_4Lb)hTJ}vw=(dd9boO`x-L|c*<6sJ@JPLM1w`A*D3auTDrrHe1 z!6ePriu0N1_PPQ9>Y>zs?EN1hThd$^{X@-3M#W369Wpv8sQFDZ|cT476Uwp{5G zF1-tkqFok(13MBst}RCdVwz9iPqXafVVhkl}tQ~X(JlaCe*dsfyYEHLql&Hr6J9G9n_#5N6kbV4NSP| z#QKRsZm$DlA;@XW-_O~i8Go6bjF?e6G8!i)+nr+J`;_>)VtG;NqOg-(rp(kuc4GzG z8pHa>bMr2Zc4|enz1JS}3$d1Ba~*2M(poCHEr_w>;qWSd7utCaj^oNB6jFziI#AHG z0{YJj(XfwMRM+K52pgw?4bv3=LyR)zyUNKZVEkwE-8D(c0hVftJSS44mCk8iyb0qo ztVeC{JK9_Zvs6-5P;k=zJR812hNv&fY=G&biT>vEGB6$E{olKoUUtFLk%z47*BUrz zQ=s#K$Ix_tY-Xj=_6s>r$DtG9VZQA8D@0CCJo0WG=+1D6@L$9Dbq82RNO9l}HN1`eGQPTao< z%g^9qmlVcvX@|#xOf(ipy`4zTR~(Njjuu9I{!E_Hpuf9H-q=o_4fWoZ-(%S6A)RGc zuJV_E%60N4t5uo)Lq~evaqRTX2`*%HN+}&B{Zc#L7xMhTBoK@t!Fd7GNf48+_kLOXieiE13IM8EDy+#=*qE8P?rB{c zD5#V48@fg37~1AMV&fR@F|c|7)RHcaJIlX+jK811a162u+^XdcK9-7hnQ+{-mvfJh zCPpt9+yd^%8KC4U%2~u}m7UI!5&5TIT240+DX06PGbQY!N;FAaPKm7=8``MPw!DW` zG|2-1{QLQ>V*4?P^^tmuPY)bBbZ)mT_Ch`&5UKoISVu{GX80U40ra;?!<1ajvrwUb z!6sBA*}Ypl@z`k%`|WW(Pu7MD3mG^S*)m*+w+nL}5>0Y3pI5-t;K5ml^6+3R02iTc z`WHRDOo^29Y2KZc)!U@-SwzZP;3603Y!6>taOWWA11|iA5Rjfe?&%PrJw25kqLYhl zoD{EG_ufE`g(K#ZiLCLQ(DSkTnLtl}gr`rq-Auv8<5R36r@)p~?Ee`VvVgRJ9=lqT zbDK5NpIE!bf$SggOO<_a#thW*HGxW{TvQ6B{4h&V=BNfRH?BtXvJPW5Nq91?XZ%6|AM;i{0 zvXWxms)gF7m{rsdf+VZ9RT9g8i322M#-+z08`3W+;1r1snp}@m0|_G<3A?x{;)6(( z0`#7|Dy_5>-vJCPze56hny-77X;-I_?O>Sa%9^Y@4B3MbTbI@~jSVZQ;*w8PEEJ@- zAff5@8W&z=wrUZ&*o1e|O(9sYu@NLN#Mt9Lj-rWnnnNH54UWkP))dBn2007hcJfOS zjNSkevP($>q`{U?B0&sz^5=cK$;ZU6Na-0940j8rc1VxYtgQP=u;$BK-#&uxQ(yPW1_v|b1W0vHO{=dtf8bH8_QO+UpUR61rtv(pY z!5^hned{cspr~1er_D5flB|oZk?cyTPH_VmoQsq;{rA6pZZLEjt0L!DT7ie5fdsIK zaf6RSiGIZSXaDlArc%mN%cy;}y3rN7Urn$6)z!W$crS-jVL!b1-%c?D$Q&>Xfl8uA zTPEy*6R0lDz+}Mm$E1C!fOb;A7{#IsfmtHujJ&lxD03Q}rkUG+zK{FjEZn%;GM$C? z^ad8*Exy>FYB>Azhc4Eg5XXPOqT}vfT^2`9#gc2GkC7<#%L&O#@!k#F(hNvzawjwS zZwZ&oSm>$KhS)S?V?pElt#N6qmdB)X1AJOokm7$q#-g*m&3a7&m&1?-X9u}BFAJEy zKHGe^j{ep*B;`zhp5+G(&Ow{~rIAwuj~?*)SFp}Sl;Yvt&m*|!lG(ja;{jr1uJHk1)pO!hBA zMuw#L_R?*o7N^qSne=ciMflsU+;5cH@8oEaw`MuY*|l*)pg^(l3)@7+X#ezy$!jI%N9tpwWT@LC zwF;Bd&cbkigW>m-;Rir_{l?MA`C2ScMs)0i_C#z%dI{Wu2%tT-%8mhx%hjdOInWWg zMFpzC?R?p1DC zP@x8~e~&;4K(-)VcZ`joPj;75-8?a7Uf@_%ro=6Y(sv6;1Hzp^5QS{UQ79`n2%9y+ z7Pn6UHwD=Ei&8&9{WGmk3-!Lm)AOGxs zKY9R+3yR(D|f0sJbUnJ_@ zo9--k*$)7owZ~-=RmXL%woK&Zbe;iOlu zI3naosJ0+i=W7IVKRCU&M$iS#$n9_WI;!&sdPduPgbzO{S%p?M)|km&!b2A$d{Xy5 zf3dP0-UYyVh8C>n^E2*xvI2;YDKb!5oNx|d;}$haAt2eKxw-xbe_U?X287-_zrHe?#mgU2bl=ru1`Z!erdUy)|^)OR;Gj`1Yl# z+&O3ua*BWm{>L*42X4PB3N`&dd{G_$d;Av$_WvYzN4!ZqYWEdMY;0e7`Quk`P~+sr z#XHZNfEWa%bEjbEzsZxa#}oHShPb%cIJYJz=_(E;+w5K#^nZ)Y4l+&JdR%3cf4?t( zSG@&6uI2xq@`Mf_k0Td3vwFM1!eB(ROK-J#v%UR4F{fC&zgLkYllhWCy>cv=8&Xjj zN$Hy4QBIg0o0Gy8V@fyfEswBp+6eMLx7Ki};L?D4ac4Rkce_$wJvy@!lVQi)gm&r=)!4TwMNJ zpsW$3HzY@BhY(F6bUY@*lS9{u$5uuXTfgE+TMY7D3VJ1R^(ymB;r`=np2N9Ae&B}j z{NF{rd!~c+QKI#^N|U4O)7=S$BJ7ORz8~-iE4QVeON1Bhk^4@C(}}r9e_J=L&U2NP zRH&2hf!X5X)Z`-v)kMPtXr1oZDSX+jUJ1%k&=@&*!nOyw^j-R|Kh{zp$3b4x;Gb(d!4vJaY~;5e`Z4>J9OJZX|Al11Hg4;fHlf>tv*u4pq!2OBRLCXBLESk z^0=5O>SDZcTX=e-eXLOb>08>&ze6 zX*q2j$3}}}jts2=g|rY{L}k?;N4+}^_UvYW z)FaZ0e|L2gUDk$@yxE&c8@K>%WN>b9u9EvZzGTMnkD;DWfA!GbXt_)w=|dH8+yUuS z(CL0$(@DaOSii)A1z>8d%`RHW^2NzVXq-F%=zepSES)&TfQCTeg8!RYi|o(9%*MIU z_Sa@60h)Xrt`Fc4cjQaL(IxXwONRg^$BOp?jr2{x>-^lz109D zJ9@)=9MT%zf7-XL09a4y`J9ZPea7aFhLGlP(lz|7sE_x)2wvF9@(SQag z0$Ip{rWkOlxv`NeEm~M$=Wn(52?c34_XD?S*Ka%AlM%;4kL!G0B`?cipzXj1K%cxE z#jxBv#rq)fz#tN6pjQxf$f=xMbb)+n`mSiR!*GIZe~FET%?R5#N6jj&WKN*D-d4WuO6deX521JfY`(+# zoyHUxZlowU!(9F$w1eee@`WPM>jB`W+|9hoM%bwskQ>Q*j0Mx=lnSr1+;N|ro6Dzo zMaPUm$GSd^>gg-FZjzD97Q|WV72=812}!`we|_45YV{9ug!;JEJ!F5RNh5rh-9G&wlp^#VrWkXk5Ix*obgFA^ZgX<-vQxFBZI(G`$oC-m- ze}Tt}>*$Oz(xP^Q3Cygt#~2E#)CvXw{NiB$r`ESG{%?zI{e`I^>pJ+jgDLJY%S(CS z`Vc6QDXCksQ}slbYC76K=wwtiC=9XJf@BH7`35KHscChx9DS99I10piM%3?4wAQ#V zxiF{T``_)5|KlS5yK^*>7#H<>OU}x{e_sf>fZ3qaV)3aABK=ap+)EgW@VBP%e}x6J z+_*Fn9lI^rzV7Pu9H0hz45o;PzByL{0I+_CR$-KcAZ&kU-drhRShM|arGGyD`Y!^Y zeo*gRP_L^|Z`?0NnMsx&7s^I$YY{BMXVtpJjFZ$l!YD4j+1V*R+i*#gh(Lwuac&-NO;H)~ z*uE2x7s9D8q`dTC+vBg<52XhHMa(wlTgXbJ*?o@v1AulKUCwK|;*&D|4*&&k_kGZ{ z)dN6t`nU95*nLLP5>9){q3B&<2?s;P(aFB0H|L1d+@BMVufe+3+e%CQe-D6@x!bSr z)VmWJSpK^HcC}g4E_vG2gsOIEN6+B{;C%XgXiB}M)#HdWV5dm)Ds}?_hAla)5vDsj zIu0GqrD2Lfx^?NeV47U%np_#Q=^iK3xx$|Urz2?pb*Qf0JOHj!Lr}NTKvlK%0kFOH z0Ej^Sd|BIj0L+i0vOUD@e*@qy^>*>z{djGw{`Pr@BC46f_pkn;n)cXU-G7QFp`RWA zsG3%yKDh2Vu{bw3Jbz>Q(JdvH`mX42<{j*==qT&1=jQ{!OJ zJjumMJBYe1gZYti-%Arb4oueuZa=PQrqH%>P`woW&;ws%&crn(441oxz%;zm&8<*o&|Wg2}Uf!g)-Y#j+MD33w8 zan55D`Uj`$jB-1`bkRLf3BlgKuJU`;3A%Y<%>BGBbIDyak>2h9us8w>XS59cRv zdlb0E*`WEjuHrExf7IqoALmS;{=%Hy^Z*z^ZpDeA0@?caxTI$af$kG`B5Zx9IvMZR z8>jZC<^JC!QX18;$7~z;_^*%OsMj(q#b;d)fFjiExylX;;GTtr#Vf{EMK1kT-_o9) zo;~8wme6*dgZqn{wWV;B{IoPa>wb=Cu8#y{UkKklmq!o|e-j_kA)A{Ulk!_!59bf( z$GO(Lgdr&hvFFM+!sm^54Lv`ChFJX*mvXv^bh11UE#}dbZ%j=*C;rQHH&D5**#EQ% z6~+?NM}duLai}2oFW5bF?`_jDZN1%Of~0GJZPiN0EhJR1G(Kw^1`_Ibvv%Zi z6Y4m#JiQ!Be|uZ2!ueE*$pLf1rU%tKXBEFZ9{}G;j&ez$o0GZZj?7@yI5Fu~O{?jP z>GPiSl8jx|~Tkp1TXMl9G%`Ffif2SH>OdXiFx`BW#1KU)E*sy9Z z&PLrtbF~B!|46(3fz-%RnJE&Csg|XNPgD0=_sWk;y?_q@&@CjtaAS(ic2&ISC?e!` zuku{i>;d50(_!){Th2SNaZ4@|vNMv5^(kML5z*?r%x;)SNR77DP2t*D&^XA6c$DNg zFeBqXe+|(_N%l%Z5Gd)OnRhH&Wv4mjk0a|IaS8)DwCgEv68ZG+_CFhp1LjZzbDw-o z0|eL-s}2o~^K|rJ*s8$Udi}S_bzY?ElIV*Ij%D{-^zqrCsN%U)@XQn%Dshp z1^CgYUHKYUmba(u!*hM@JYkv}Fz=Qn`*mW_e@0-d3nz2!%MAy??{vHh~;x%}9*QeknFh z89@L%o)*=>5StRS^Bh9B_>MvR%_I+T{vIxiy_x&ONKSV+S@2Aa%$KS|uwi^IZ@et54?SXKJ4B&;rYKw0+lb%MOgGxLyFTg;?RF|LbsX7!HK zW7Rwj!~6}jUf-R=O+ z^q>*NsDP8I%RKwUfGwK)z6dFHHfBNInkyB-l|Ka9LPnN9@`^BO>e>~7$9zOG%W5Q9CGH=Y$$BAJ!)q71p~%2ued zb!6Lv)lSIZM0{4aC~}xu()YUQ`Ee0qFj)HpSY%TD93EPIe{ufF3i0Av zPvQID=Q+C*Th&Vh5Li#keOcbSbh{v#M}5VX&WO!U2_g@zytY<8BY4U6FDY$(>Qz`% zQ&aP8IQkE26u1TcPyJEff2U$o43CI@M4ALGRi<&1ghIM* z(eKC;T_Tm1z$D-f-s32o?drh);fbmxNjbLDWGzJNe_RDDqJ7cVwwb$($(QfV zeiROOtE)KHZ&v$*#W@V$YPO8K>wxQ53h1VYqQ0=zb&NO8#S#!+%A0vG|7{qIO8ho- zY!80h(Gl||t!c$jC6?H1ov=4TiJjeHQ5sUbpwizh>m- zY-IW1`E$9|@gv^P5bC5m6R0>r8pEr&o&SS0QKzR7 z+W2Fde-H>r0?pP>X-}-xLH?SYCqb`xHiB3Lop^9<%;u^{=neusWARQHsb3^U&Q-il zs;T}>O3}-D8Fn%bthaSM9;c;h(nn9-Xn(7M5@x~Ph?iFZDy`p@B~)J5rTqgJ8?q4p z^6T>7`U+%R5!>Wro@-P~_1KR3MjTKuA1gsFe*jMD(FUpP{V^Q2vQmqomDSO)vnBna zK~rp8+BKcoU|f!cX7utE&a^g|ZITTl?7c7&%#&Dk^^!o$%kvPYz0c+%H2+CqTdW=K zy4d4ZCF3&Ka6V6L4gvyydT~%OV}K&xrbT~HK2fJ_VTqr;Jwez`f$*T)nn-jCYa|*f ze~pn9kK`25CLo}uCZ;VCMXcNRiU&OUIGJ%d*pH@b1&%3Oln)JtkfvKD!^{!l#{4|6FKQc^~6^(SSOxEwM~SddM2XoJGvu4BgI z5JPy3v~Gqil9CB2jR*}VNI8bAs@HNs+w~e}c0SlPf>79f%$oMicX-zNNDt zMTJLMcZK{GhA@4Vh`NnVoLG)mO3)K_y7Ws1e=AJ8WSDlc z6&8|41}?;5=+$&O7XFE_ZCOk4e?^roXKl^QZ2c-9n33Ig9E5rmtsxx_)dR+#@ofL@ zx5LsI0vFPOAGgMpLxe*jiV!nbW>9Jccz z*R{v_t|B`v2={zsEeXlv_(aR&0C2%hp^Ovx;TrRIod9hD&3s{5Mjd}MfU!vfOW+_F|<9jPsf6>u0h9xdFOZOdASxB;O`&cj{vuTAnUT&OOI?GFB!d@ zF#0+P{R^>OVqGMse{>Bjj_sdn=|Vb7ql;`m z&cjS0j@=^%j8xL|!f8;_tBu6y2=N{B4%wQc- zZPn_p!_CM`>Yy2>#Gcc5`LBg;BjpbQHYoU8|6rJz7(_!Ff5e%xZrPxD24eQZ%_(H?;hc(;`sl1 z_%vqFv6!ale=*%?D#$7M%G+9U2~re!YWAWGLComLZS(ATotZTLL`Q23!X4*wFGjSM zLJHFQyGS*tG3uJmsSt$fe^l=7zf%|pfmyf{JdUy3i%r73_kWL~x|66iNl;LbTkdId zN3$DKo8D$BseRa|{(;AV;a1cs0CW}kX9otJNg(E6f5tf=DT1sAd1qdoOv^PE{C}HW zpbQB0PO!BAD1(4_ARsV=HYDd%a;bVLgaXww0~W5$&MV!9dAJ`Vu_qI#8S@7q$p78s zW7QWCVsrHf+@_gY(~{eq%}l27oR$<~KXjG@(Qb^yMy*9Y%EsDv zjj06@6bgX_Ft~H{UfNGBC?LjAbp={LI((a*<-|o?dmF5zNn?{*LVO?F>)PXUMM70b zf87}f=>!+V;-ub?^aiKXdX2^n{qMN`aoGP@(Iv*KsL=ne>~hyh%K4Baw^4rLI|n{q z36VGn8Gl?m0s?nR?ooHT^Z>kqQ}=)wi47qbe+vj-WN>D1P5n1MXyF7W*u@ySj0})y zoj@r~WY7*9F*`b@C32ck<`p*L6xGzze?RW|=N6Dt+S3(8H?R@Tx~dxqyy_>qToXS? zlv#&)G#sx1PH1{j==@P6kWN`h=N23lw)pxDMMwF>rlfxV7yQmZCm}VcRtgl7svSw!s!XE*-zHwg;e+hn6 zYDg23_@2(GS2usV1##{*9e%9v>r$L^6we`N5+!Y4gtYSl+lDIJ#x{3QC8WprCZXX@ zzU9KVVU;F^yOU%N(nHZ3Z1Bid(tF853_8PRrrY4m$VwS{0O0HRqdRg_Q+rT@hL#?u z!i5(@Ht!%`C;e9)k72>@TSp^^f36>QXq0PNi&J=UU9vs8{wn(3^IxN!3UKc~;&N(4 z$ks(sg3U3)u^R}wX?NnonH!fugg{SNsPAm|AV~lJvAFlg|Me78Yu3%ts%yhIi6GLq z(UN6da*ZI-uxI+_W%$?e>q8%6_0qrLg6e$ zkbC(=|5H1AN`#}!0Avfe9eWjoLc}OxJ^&IG6;N1RcX?dS&%L+I-&(TsKgNn=6pHsa z4q)j=iQxF4hZyt#pmc5A?=b`-AMIjjzJ4QMn(%SRr*~uhL@^O{aRb$l_q@l!8U@=g z#m40rAbWC>sEC>FfB8qW+Mebf5~qTRs+D$POn;mdB2+$g+T12D63-K<^`=+I09e4_fa)(Kt)*L1)@OR2vG3 zT7Jy*HmA_nT(pCWh#mkD*tfOcWvp?o-nSm^6#RBieq_>ue{^$zTVr^_kA3Uc5uxiJ zhd?I>-6Zph*@%#P#G|B9-m3wnruFOgzIKSs$GwqIZN~fWISiJnP|4fDlSfje|0Xs4 zW1u}A05kv@o2atBEvaXC+Q<67W7hA; z4G|?hoBz0}P#-Ij2Iz3v=P()YPB~IG06{!(8`|&SLj``q%C+Z&gr`C9oop^~tz^3bw2DH#kXy5d3A`e}n|XB8Z|zn4MI|yg_M&*-`BQ zFeVR6+#G@S$T@Q19D0lGeEOmN`|T9b#D_+U-0|rrF)fS1er7$@6|-Z4vpsdEcu!3)^BX1e_6aL8LtZLyc{;glev%Yl=IG2c0nG& z#SFFZ2f!%q@8#qAT2*VZKKZU)OOTRviWn4BLRf{(6p7IrUL*HrhLzFV;mj{!1hEMGJaEL$5r0glcH;X5&>udX|;CMv$yZ;qn{gVM2NoDkZT_i4QhiO zf81V^7Od^saK&sQSbs+COPRlq{ovj9$BuBg~?nili%>zF4ljXsu( zoD!qUg#8d(0r2B8v*{QI4sW8+?aNmIjyAN%{Z)GrRQuQit7gHQ)+S@K#$ryVG$!zU zq{GkomsfE^0!0;-jeD{Yot3okCx|r)e*ynx6(R2&BZ;&7(tQh$)NfV9=mu5N`>a~R z6$Hw&DhVW_{29s4Y|S4VYWPO0S9h`pFeK)GEstdsvf?QIpaXF2ZGz*c>IUbTIw~Tw z*DCUK{!uZ~4*!nxi{B#eV%m2YcUn=MeQ!Q5dU9RV)RF4%HeK ze3*FF^zwOTU#qGdoYY(Z>St_ja#;L_j&8L0X_2A9M$JJB%q!In+u(fI5NOra1_hv* zSl2I$k~hB}3woi2_7?Qquwm!(e{h=`mair0u!616DVuTH3_zJv8L2#1i(m)UCa23{f54{PGA)IQx?y5IgoO5rpUNanWES>U>-Sx%mf97yc=cbi8 z*?>pN;ew01rCa{(`bgORf}8i?Y7asbm_P!vr*5;4K`!!HrdAVMBLyf^R}!9Q8lT?^13sITMg< z*=471v3k3+>)1iQ_IhdIe`&>e9+&9!Dc>)e8n>e;IT`k7*SU{N7!P+l+l?4zEg!offNB|JO>IoznJY z&`D;QkC4TIjIYX@_)AnDyfV zW}&m25q=uJkwS(g;bQD&Bk`4E02hY#MxmJT-jS=yMA)k#vXBcyxq!=!b3|r_Owyco zpC%H#@tx_L@$OAHq+M!?-Fa3T8vT8f&tp}EOlbV2uzsw4QK+cUrRU%fg`i!0LcNlU z{AE&qcF_&Lf8=*5Xv`bupHOeepP!a6sO#G7SL!xPxjJjN8Y=@Ccj(3&+43By^I#=m z?TYyNRU6spu0E@7Kq1qF98DjIE@#50@@&$MQ~#_yf&-O&pF7!f z+zn4?D~f|ZGD_bdB_)H4>qI4I`!H+x!F=X(cJek?f2Wda9-XSaJ$@7B8K<7b|3pMc ziN*SSg2z6DtYhAMG)u+AVWlOG%5D*cPv7zx_XH64*$X6XS{^FQDOSdH)t;ga|G^V% z>Yu~ywcHahVtBjt*;D&-m{dYVIOu6oL~%p!c;-qye@*ScV!{j7^|7elAdKW~+r~t7XrkBt!X}sLzrH8kDPjlZdt^akG7vI7>-A=` z#;G@|q`F@jp$V$XaUJ9*;RNA=H4gw%M2M$I9o}U?zG76RxvEGxsk4EA?`KU%g^kqc z*9B7)IWo^kCTe)8yF@Cup@CUKe4VPhq&tG^e<54`uiCx|EF0owDvn{`*eG9TRj@Km zp<$WxU<+Ri!<_n8iOWp-n2z+Jin} zkCqP7TDfNjlq)#;CC+a((vov8aFEFXH`&}O*YuXle$?1lNi_~HlLb^MnGJXdV)&>N z&3-X?bt57oH!WI@;B6E;jmbUZ&&L*Z97 zwxhuf2CUJ?f2ph$?Hz4*J(0-2iZdOCql3m1VA!638aFQi39s>nn~B#?C~HP?1WXTd z?uo3Sx#+(U_$H#pweaSzfyvGiiGwre9KufpXSpk$m2EQx4g;SSEWhjZKNbI6fA#?A z?8P|rv{It%vUWkcFL{&Q^y9UUtFy#Qo8Gza^JX2vWfo{}-c*r(0c>^ zCDEzaXX?%=B|{e?oVh!7g+YBK(5vu38}4a;nVXMar_i2)I)$EQw>mYwn2T(QT~651 zCDYl;F&^)T{tUdxX>F8}q4y)?yS#!9_i`i|8^_+ngB<<2jic>7Prm;he^z=cJ+-5j zCEERq%t^js6r>+z8WsMfTuqAGLwu8|dHGOmb=f~QgWTiE<-aWu-KNvb87?w0^~0~Q zb`?qazxI6_eB)ei1%S5$KG8MQ;|CE7~&rMki zlkOb%9SdRIM4Nk2e_yVigE@esjm|IQWB34|%@l3%Apm!Ota68Yf6QEGzfFnjxE>~m zjnf)3jfHi!PS~Zsx2PimoG|cq9xgJE%fKPyUjHl z@7wtOfip*F%D!&9e;PYL$u6TFj77VeKb~V9^Y)h*1oUfAe0(3$!^AbHu(5DUU&$%*~|L)nFsxe&Y;Ak8+!%K*Z0*kDT*EpZ<$y+uoRVUp%}@>Wjw_a!FORm_lU1mD- zU{>1+Rw_9A9yFA6v(UL$L{%!r^?MuNT}9f#AfaSRc6qaUdX%8MeFo}pPo2>h#k#vo z?V7!J*`*YPN~zs|uM?Re@~UV?-snFnCu?Y-y0o@j8M~BrxBX(m6JjE-a;T{`xOV;= zYs@Lo$|aa%e@=$Wa4&ZFW?C!EVX&n%bu>+zUn%BbwZl6Ey{Y~RfMU!QPWerDoJz;I?wULywm&SAf6f(JjQW1C`!qWOV+pM0s=Ukh zf|iEykAhtyox03TzmE7Wz5Rtmgh_l3d+AEO=43xGJy1nC5Y6sb7=tS)&nJ6Q)qfi2}%_C(7)i?Bl?chBXzLhz8iUSe@uHkR_n zWqx~*YAcm!hDf3nTH8ITxMx7pK;q^Dz&e$Lf89Ki5=QkkSSg7|`HZ<|_T4M}Kf!9p z*NL49#gic=silG1l`MvSXBu0R6)g_{OmP}xXR4J=sW9K!#V~D83?s|$MN;DL+J~^Y z9QSQKYZH~H-t4{Rd-L9tYHpfzq8v_X+Oj^Ww+G`b-O1V_(ebX|6B(gFo1}Ju8bt5= zf0%|==!qyyfziKGh*e3wuM=wUl>oR~pOInP4b_{%bwq>Vj7R429+bo%{Lf+5QrB@W z6X7~SK01&{bUijcjhC_#)Hib4@s$__%8Vxu0JD#kvS#ho)?l;%f=Q((_HKRz39I$F zg};Y8+i9&2qFt;{nso9yl7Jz&00qS9(@F21%&q;GUcu3gOw`Q;#q zMN7ZTYzmd29{8~9y-DZHr5Abh`NfUR{?}71n$xUvmK@RiU5cua@HWY~W){5#mWr%s zom2X$(lZ1ir$uFx=2mHDxws=xWr0s60;$`@&KT=!zN9b3Dmj!ST zDoUT9Sv{L1y%ye-!4!G`&{b(9e`N{M?h84u zZwq-7x+^4BHeNj0I`l@wigDvor@Uks-gJjsX7Mi3LmQkMv zTSQk|d~1MgMWL~AF#Ja^^@69C_x;8fs-QEmaj9@=M>7VjUBfqFetuS`WS8UkPJ_q^ z6&}u&2|nt=DO*5Wy&dbzC<7m#=ZzE!hqA`5R*-Y6ld_AE?7CP;~t^Ln6rgoRL3 z=*O5>Ob>u42-OLHe-C-$yPbOag;!oV{Dz6Zp9jX9mOHiS;ChzV+-ik!J^4s+Ci+OHcK8>#cq75c-EjVyC3t7y!yxN zyT&60jxhN=2e9a+cCqzC94EP1=uY`I*hbSfX7@GX8qw6 zOWdti#ZuLgn!$c&KQitrPvj!=n$hwD z(S=ymjt}Eimej?w=F0+d*G*3rsG;4f-{=UV??2ss?m`C<(^NQK6|?RW{X+YK%c263 z=WKPT*efzGe}P@^=VSOZ*pHO&ty9ji{#<>P;*-yfCu2oRPc#l0K6T+eeXgE*8y9RG zlY9ddEF!;SKnn4vz^zH*fF z2k=~nf9ewfR{_I5$Zic9ED@-MEF;Aaa=BKfQW`YbNwCJ_{WdKfR&GAPyQ70+Y}s>& zkuZgnqsts}Lq_JbW~}9!P9ifr0S#lg^YP}ho&P(jD(44`AtDVzy7qkIC`4CfAjC^0d))8Qm?B+Oq*#*XMp6BB`8&; z?v&h=+|!8;p)3C^=LFs<@RA!bR)03%^Eu0b#j7r@_3BePj8s4V1ozh_2x;2~fCE?F z*jw$21LcG}JR3b`8q89Hc=qy9OjmG@4TmbRX5sMaRn!iwG~$oP>#y&%`GnQKFts9% ze*m4pd6}e4&=8p>#N_XgowCY6lIj7D>B3pO-RY)2?AvynUgI*Q`zct_pR5~j`X3ivI$ZU< zrAdos=Ody!7!MIGFM=X%lqot@zpyO(% zUltgd_xq3$%d0~OEqtf64H{;eBiIW1ygpUJjb5TFMwk}U^nFE-Jee?Y(nYcHL7 z4|h3b%S>m2KSY-?3D_Okjb@@pq>|pgY1H*zyNoVpRqPv4vIk_Uc*gV=Do|zUhOUhiJ)rwzd+_BX{0n3Xw@uQg;&V8YQ+pe(RHu5U z#2Gbqowty!^#yKntub>w-|Qd&>mWG^Inoz1jRJI|d}wo)WsOC0f4y2H6Q3K=mWo8E zF;(E=TykknY}@hMN904<%dqnqIOs+4hlOiZ|1(?@K|$*c-VryWZ*}l0tBTUEo){kw zH^<)(lPR2GF-PZJwo`)~LX6KMJRZM-- zj4+*L3Hdme_iQ%ze*q8&!)|i4;FjO|@Imdko^p*m55Yh^RvD4N;=#evW|EsfuZ!;y z=M*)QaGsrQG{*wvksg{$i8G$0B06mw=s7TTa)|U!k#SP}< zO>gpIk6{lGlj=sCp5ZU;IDK{_KqG&7Wzs+T~QWhQQJJXB*vM4bZe>PYqcnL&|t zI{qhF__(w8f9Dr@`$RM~Z28Su<{#)1V@9Et{!qrwv_|#G0Xrev!Vmu4rRe>GxdIlp zmX%ez3?1}=d+?WpL#eNwYx6T3Y2Al{QS~aCt*;l2FC2h8i)yZ=ZCe^I_XsrJ_#7m4 zoUIy^BEMTUR^9>=l@=(lmfxg5`E#>N(?C7f+9vTiM7d~b-#-0_`KTU8Ktbu32fzeIuD-LID?#F| zI(fggf8Y}lQS}%lMeHy3#n;O(s+o82KO>0)-)w`!UB=;quU%G6vvoH)2~BBOT!Xh* zy?2f6FL<*LBY%tchL9mc`f8NYy4cyi%8xVgmbL#L%xqR@T*2S;VY+iGqagMfi1bh(f=5*f?K0jIdiz`8 zJCT4|J?^fRQb5!x;E&knoZzAF4Do|>@l9MoT8BH7%s(RaWWuepCbjGee|b{G$i_{V zv=y>j{K|R~xBgEn&Xb=fuEj9WkUv6Je~kzxqU(^87S&c6N89qnOCw4f_UuUpksy+$ z+%(6+-$qiX)q~>AZjEVD2uF5uu33{O`tZn*0%=A(lbUbt~pzw~79SLRRmg6Wa(WX-zd z_ppF?cf#E=3&M#zwro4wfm70vVPnHS(PUQ_E6-o?<>b$F6l_XP9KOl23c0hnW#dbkd zVJbESu4v(fvJ+~=@aR8X76m0YqNAMH2E^9NQvEzEfOQ#8L-acAe+!pwoGMmmLO}l; z$p--T%<~J1oP7xSrZ;o3>PGTbX|6}Z=kT(z+C6VlPv=8Ex8B(g@U{Z@zI@3Bt#-=m zLV5JPT>JBID-Sr(RBl4fC3v=2|0-AVbTbegi)J{4TZZN*+h3{OH`$nPu`MN7rY^+A zuluN;=P~eaCHmjwf7e--6JQ~`o!LG#L#tQc$Yy?ptl2XmZe@3$u^kbAY{~;zKkmlWf zfX_TqEX6w=v)|B|cA&&};K)TLAkZ>hzEb?kb~z7pG#Qm&6t`%Eqv&g zof+D(4u)O#f992C&A68Q4hr-`;s?f7T4q^D?k1@gCK&rbIAR02tdepE;Vh9i7h90&QoFLbj; z6zH@Pdkg#x9!MZu4>%Q3&K1!*rHJ5Oe<^w$Wx2QGNhW@i*`7j8*OY#oCO+=_A-vk<3DPH}a3co`WucFa`XlGx&vY!}5K~}&gMnCH z6{qG!~GqyWJ2m;ZC|4jLhtv(duHlPrQhs6tu#L4-Rs*VR^IqA^cDkZ6P;vj|Dmh^fxg-)+Gp$2CWhu$p#1Uy zkgIq9{0)R?%&7tcohF<@Vd3YimF;I^MVzAjXMaG27<-#iw-FgEIc=##as6z{&b051 zX8^K#{;#|;xzUVoJsGv~n(dydU+mHo;Wo#&^OIs(uyY%V^mrm0SB*e7kyzflB<0Ix zjpCWHoXMpsPsF{r?&*-UjzzgS`2N|Zml{CRiP89Xg?g%z*`c|G%dNA)73X(@)h;|a zM1SkYT2$JF;1R(>yPHk-Rco_vA(~MkniftI<^5zfd1M#3wVNcLTgm5>?Q5W};nY7% z7;E%P^b7D!Q)|{&)n6r;ne8r~3J`$cpIT3GFkc^?MCFWKljk&8(zQf|;=$RZjG|{T z-1qsK&%{-71)eN;3{0#DvFGXt0M+y*v41_FqNbS8;$`)`xJ?p$BC=$5AH%R3d5#YI zB_}MnH;Esb6yQWv2HsJz(}&lo-An@eAblMLp4tl`=w^Krr;o#2eac7awM@hG?#=!J zbMl>a7t`QW7t_0^#*}E4;g#$+6){3=Ln4VP(2Nz{!jas#31$5DxPW|umE}G_rGGbi z0>iZalY20g<3diD*`Hn8$W6V!fh&C$YnyTzp4c;+_G%_VF**wB@^o6+r{a%=8h|wO?3oSM|U@oEjEYQD zv6R}C54$mDh)r-!%3U9%gFz>&#=TLHgV@8#hsdNgQ zKznWR($lM;gt|rRooqc_I3-?UZ)SmAA$!!d8jk1}4-F3%*(jRLM5o2T2!HBVT;qXY zDx8V(#tVV?;K_Iuw-LJVoIf*C1e-o7oYt*L<7LxvPH#@M&DThO7n9{MlqcKru*3~* zyHE&LcI3Df^6neQ1n9I@bP{?qnHqlDDt^s^fTH!iAG_^7 z9a31o)*5wq_l*$h?MV3jGJo6kiaVLplt0-nDTJ;uidby6mXV8_q(Xbt554tGF{8?h zASZ8Jk4*yqQniM>2?@wW)`G4-xY!eyC_0uk^Fv+%yQe=lrZowi8iTOqzU)w8<|b}H zFI#nnWSOExj5=|ye%I8T)o#niTfj3<`H4=81w~y-TlbLJ2Bqsy{D1p;oyNSUBYQN! zQ_{-d;fDJ777jvgiErf|&kUBx;9Dhak$nt4jLSxgsvBRI>g-SUUrjt=m4mB(lue+| z#qES+&SGPbEtYQ@@n$Od+!J`dtNIswG>d5qx1&{l<}5`D*3POP3_jb5 zim5V;*=+bvZgy|V3xD#GpCaxA#JW&{1@iWvr4x!cUNuz{)F6vx3$%FPu2j)j9gCo~ zUFn8i_qtv6Ay}t?TGe1?sf|B-XkT!VpOxxK&u1m~9!H}o@w>|`h)V}lueB|A(3Gh! zeoi_1`*dfc+Qyf}Pr}n=mL!Ecd7gXF{r7J@85-j^xNR)D7=O16a`es1Ls)0mU47pV zlnoe-rS{+_QW6XVWV?I=%S`P`_Eqnj+AuZ5&sMS>UkVv8#QAw-DSB|Q?b6~oi6uu7 zRM13*oQglKc{ylY>&=jh{Bzo)?BkVe#>BJiIJH3N*uBXsE7yw88&FQRUN=|OZ4|JP z)VJ5s_M%n!xqsh0&ps>2s%F6cyP|Ooi&S% zZXGcH!PU^T23M95xL!^e#0Kn|CaI3|COVx)lx|4vDSv=X2-kZ&)dH*q8( zqB2rBC)m1e4}ed_k)K~!P$l&?i|2{nN#1%D#-;YDF%Is9_ji`SQD`#={Kd1TVgc{ed&jM zVSgUhPhsR|W)wGfcF~F}HhqX|OCv)9~ z*&T(#RSCb8OqM0gDolsNzm8f=e8L$PEgSW2x0Ik}(R3-PXsKHb_Mfip_+4Io1uGb6 z&*L`Dz1(+nnj#Qb<*EV@KJ}LK$l`t@5P#is!AHM9=ZVHg`bG!H>mm06A7?2?c`eo; zjodFMy6LZwX-g)_lECNT_i$wvuMC=9!|fO=);}~%{I+!BHX&s?wM{sF6D@FY-cJ8q zlVGJ(uRd!Tou(HIQk$UU?}-QS-T|U9S`jraBzXfo&+fCntseTq^0R}RVTGMuPk&kk z9rns6I3nESg3`h-Ew|3Zv4YDkB@QHY_rc{d2+6;*?mx**1vi~4bBm+77vGZ{+6sBc z)w|Xa@R5uI=7l= zoocmes>X2hgpfQnXA>HJ!HCVd@42vK@{K-^Ztk?TlGUflT~Ffld}PoaFMlX>Jxms! zW?I%c&R3D zl&YG8bvTx0yBLm;WEui{(_d1MpDG^!B=!%0u)mIKB(De4p2lEGz!j`(mR{(2_~AMP zn2{Gx?1^%U%HaFpFa(eiDS~~Yf5z&(ZT@Wix&~}qo)Gi#?VeX#$$#J&n@lDb!>Ocl zfdT!dbo7fT2z)8!UHrWlg2a=q<=YJj)Z_s$+jODS<9h#0zwK|QLHeq|H)=}I^Ch?S zhB-2`^uM#cm}ZOLAz`iU!uN0Vk^4CJ7JK?V1P25U*jEXg>teKw_! z&atEN)S@N<`iWYm21YZ$6u!~caN(`TF`uEqS%hbG+r2$q1AlYsB5%c4g9H0qe{u~Y zzG;MH7LIh*uN9wCcTtxf%2`%EK@%c;WpL)d&!FWkV8j5M{PW{T$2>be8KpxXdUC(V z&wPzZs0`}$@X&GdPU+b-|MK1q%QP9xv6G(!e3e{wmhw6)TFSFES|CW&*5}{|NAr|{ zm!#G|(VL?0<$t^QNs^m5XZNq|YLb3@15qxXqJbi-;}Y1$wlnmY#b4&1@J;7D?dZ05 z1lAuiMe5vWG)x?k$$Qe8wQhN5^^h6QpD`lh?M5UwgNFz<+SfaYNhZ9mW2yXF(a0@4VaH z*6C=^JJQICb6$5A7fXlg(F@0LLU$mHH06Shgxp!MUB1c;?JQgdeoM;F8I4n$yP5z| z_44stO?w5fDNl~0x)Wne#EXyIz0WMf_HYjjXvdKfrLo}3^{geXw;GHF?om~>#QR=J zIz;wFsejNJ=ln9<$*PGEP18&>s;d;Wdwm}dPe)Id_795Qsa)A)R!OThbQY$50X7 zOgX3~;g!68lPa|3HDM9@sa;?60`B`Axm!0tMrBlDi^^9{_(z^g3#HZD?MBpz+RnRjQK*VP6HRmn%`waMsIq@29M- z$_0OFOR=HvpP%S`_5C|ErptiU4trCdNEx`mhc(W?-4ENlBh_=Aj`)!2b+fQ~pQ8#o zsx>|1SItU8h!F}W^Aobtz|G&WHSC|sfq&a1{j8Zes~)&Ho`Qs#+tM*}MNrKbdhwme z0z0DMAN|L{Wp#9u^5fIH8fyMq`qaIqMdV5Jt(Ug>OT&Vn4V@clkMh2BbPNwvn}>4F z%*q#^Trj{u8F&O@#sX^fqpWs%GbPShx z^j&Xro;R_+_*DwMKPCdNS#Ze8x zGR8g`m{zc=Yy2h$)Gbbz?D|%9GOY}34nI;_(G>?0j&X0e*#zVc+0}NfRc5snd7PpqEaPC&%CJKaO(6#8jiMFnL=IiF# z=rHy>NGS>HW}-SUYnn;TBY&9-p^^|U5E2lsZ4o+)c3PoL>Bi01(I&_Lxec>&IA_sf zO)MiCLCn&HM(H%cOL4(J+Vfi3WA_8)%?7p;BNA#=wA41>U0sjheT&3!rpas4e{;Ja4+os@fdRqefT^r4ew+???sJuULPOBo_&O z$8ZQ{Tbc{Bl^}-RG-=l!S09|TYh;nBrYK_GCdF-JUnFkeEsZJjBU>~CFD#i%x_ox) z$GRX5k~U(k$e=vqK=ciCX!s0Wcq z$u*ik^&zDvaWMHe$y-GSQ{Um%l@3d8M)K!>^ea&R4brW^{#*OTG)AVzX3BF;OYFLZ z+hVwLzB_1eyiQT-Vtd~=mrIDg!3$z_1@Bcmfa-?o(!7zdLa z+ZE*b!Al@VR5`?s%i&Zc{&#-RY<~mWU%HVZEF~blO2GeG>5i;B{_N-%L*Y(C;;q4%22YQ1j666t>cMqQN%w1-Qv= z%zroPU6(>?z{l)W*0y12zv(>>}`0AJce!ltDxI|sjWI1NN@wJgi zcKfpx{X!>UJoAQA(QSC%9Jp{gXSL%_Cx7g2SH>Y5d?+mIatt^2LWV*Miask>)|4!= zOha=@Ye~&o4IL91Gqn9S;=T42=uZKGp5BD?D-D@G^|Mupjd&Sd(n(n#Yd)CiY*om| zTe^$5(0hBvh|x8!THY1K(8XR{7VzRZew?>keCxLI0$I5Xtfj4RV7$A^#USb48h>PR z!+bKGt6J$;!>tz%-gG(Ud-Bh}N5!Pto$+sTEjtgZ(ib)$Prgxe3(^jA)|wDPxMTs< zg9qRqMbd;t4r8}xH&(DWtn+ri64f5>s&|X^t18cR=5;}~8L6q@yi9;rp?4NOUv2Zk z`P%OQW`_oeSS;h5lAB<^Ho1xRs(&R#oHJsMrYm)&|X51oTYp)caukTVix}Z3)q`i)cygu}O{jJjNI- zb(!)R`}nq0MK!vpk|EhO+P&=y*#)0#pN?ZGyb9dDPHhw)@z{&{S);E3BtXceB&qt1`Sh$2ei;mrj2t*w9iZ%(wCl?$ZMpYnVN?Z>W z>mJb{wdJ4}sk7EQ#j`=8X00^Y-~AJ;i{^$sXMZUC7%(V5;HBc&s1agaxgE%FFG2h` zH9)qtl9wzGI=}hVS#Q?0Go!H!8wII=6^sQ-A-{I{X8l@ew19 z8@G;amP_1A96$aXuT3KtZ=1Y7WX%?5%QSXte!SAbC0c#m>(zO?>{b-%h#q*gLy21N zl2gN2Uw>UU8&jcYN2X9$Wn6|($06WvjI+F?6YZZO_|T8YVG%&#a53(4t6S9xynw%1 zDMHN8UwI?P(IcK#X@5okUG}QzGQ z@8EAY3d_Z9*Pqa99-yBrl^O@Ioa605gMVqIeC5WjLmZL3qWI=|k(HXm(CBY}{BAIK z0A&131bhiea~=JOlUQ7ANb@4z?PNvUHtH=~8=cs@$hy2z(tq|UJCMqknQSVtIQt(Y z@{~s#4Dy&LWHs??$a{1DkV@Jt;pB5Ns})JJD#Jhe!-|n}M;yv?XJQ8Tt^`V>d0LK}uNc?<=}tX`dUi@CTB7 z;mS{>HQeDFN`Ep6B^d=&n$Lzz!<$8gQnsnC!Y~!*=s<5T_>Ere{OZDsdLv^OsK3c# z7^QX`x5eN?Xr)LxRmHq8+ec|JMQk3F=H5uVwQrNQMm|r?*h=9Yq4zVNG$FzR?E>%s z2&fd-$2dcCEkKigGe8zdhMDnJ$y$iSU%h2k1&d3jf`6bGclgleARdw*DZUf2NvR^k zHWH~V*si_H0j*&d*LxZ_YiKVg`aDYZgJm7Qnb7*|$wU);u#HnW&Ib=3MyQ2OUu*pN z^;I&z(@DNs`zNz{XJMe_;HIEj`}5K?*W^3uQu0yp>|M(q4^eeudzA5fH-}wNmzJ5Q z+-e8HJb#8oD-+1ZSx7Vu{BCs=)nJyLN9{1IK-FKv`^L7DV`YW)7y((41bbq$^)Kxx zE0ewXr4m+Im(+FC2TSos>6Z**IRc@LRh9&wnv)bhR8ydT_hjS?O3Nl%>ig_d+>Y0# zVm3^gJ$Ob;a|63F*|*sp*hJrZPbD-Gy8Uaco`07wL}c(!xc>t{uYrLcY0$|qVLmAu zv576rl*YmS(Waiu_ReyrvWCmi+LN3t_^^h2@Jm2M*WRJ*Lir}q;JczJ^k3vzKWVfM zS=BN0gg#nU;MYRE^TK1uJXa)#(Io4R6OF8*XVM4Bl2)?S)O5vvS~X;fMkgTPO~1^} zBY)}PV(ZDv<2TW{R#45?6Fnx{g0vs5%tAiWh^Iv+_~rHFu<`rq(;oXa5|VLc^j_%Y zs%Y@vB!XLfJc$fmxx9;Z>s8~%iQ>0Oc==g2f-s*LGMC+8;v!fgGiDSlSxNI`Mr_{= zp1*`Pi#m z(8Qs=ZtdYK4y@|;&tk$3C)70@@QbwdW<S!9#l7&1NjSLY{X@}uT$B@r z??3vg1Ieos5qko-9dM^(a4(IFSpBOsVRJnR2ybz;$ZS%6q7B7(exRRQe;pm5^nZ+D zYgYL7o!U>Or_k30;NacvvAk?ct#Q3TLsiA|!em1X(SQc}i3Z_WYtQe#2E{gQVM`Ud z!kRDnfwQ0C_;N3PcJpRNtTdjSR_4 zUzT>|Dr#7zG%&(GIY-p{tKzRMe|yrgO=P zYTWU7!Hm0??-xfVqe_qLntH0(G5u8U9}$sRp`N?<+fgA#z}cz@bMz?MjnE4_~< zL>pYbNhZ)Q3w_yw-sHcPZBA-M&O}ILkJLYS9kRY2%u`>yG8V;ZwHzb&9d>V<-OLhi zn&sv;e>2fir2knC zo;REH0=88nohy!bxNWlsAqFUHlNrxJjT}jiMBB8V-QHz`draU_5se8eq}F;(Dt(7C zGiT4XeyP|&H+OHOCK$DqDuvwcN;iSVHbj?^@n zc8E<0)n&rC;D7I0>%#7AN5Oq|p~VBs0893D1RDR;+w^QR;xbLM&ShhZkO?x#DYKSI zu@k+IjFUn0Te`6I%}9Uf_Cg$pm;w6Tm$oo89~%186n$StAG*kT3N6STBQBQwX*!EP z%NEdiZ^OszAI?il1*+L08fUw@Sa+H)Ap`OB-3`_ZOn>0_;Ab!$PE3Th@!6vpx9S56 z#57V*v0S=e?Q->tjqS}owGh-7cBYaIJi9mqz%ahCK*{MvN*9Q8M7fd+#KSr5cjyom@0-cF%Rso#!<7DkpV1BKxN;b$RRc zCx7x^W?{E#Z!ZeGy!3*!f?uM0z=J&2DpsgSg+3h73if-Lq{7P3CBe?PK|jz;`6|q4p2kHLzp)rP}gDl3+sk zMei!x9`6}FR5qLbJtlFS3p9&z!a4UEihs?`jxTU)QY@P=f%w)+4eUtp^iR+auv@lf zACyhVsoqGS-kc41X<+lRq$NK`K#K5~ENH0XpVW-#uC=vATtIdc#1maEPHjE>y*EAG zolZQi%V^?6UPX!2Usb&az;nppRo0+UO|Ek7730>vKIBy)yOV4@q?DLlLf7*WZGYAc zx;PyWW?Y%2K9T;}0(bs2ne9v07?Zo~vL2(G9*yY>nXJL<(kv#@2G}X4$dwb}f;W1t zzvpXtl>){WF>dftrgI*;vof+qZ;UU{-xE|Jgg6J-6rVWq0`et5?`(=Be&x^>Tq(E2 zb>XGlC}U8a(s2ozx7D4MvKDvX$(64vb9Vw)zv&9 z>jp?9FHw@bih{?w9>bTA-&9!b9NwpRO4HBf+k9?%p74`f;q9w;U$drHuW$?w+Z}K^ z#OB$*e7pd2$$$3T;4Y9Yxy)mBjNq>pM0uE0E zx7_H%LLr*a=R&1}K%;D9Uz>L@f?<)n%kX7kPMRpku2PtBBIxE6vw>% zFr*qy7NG`a>1Gd&L39HC&36yUg-nu;Xa79)dZ_Y?w^YvKeMM?+*sSX_2 z$O|{n?)^C0^vO;7beS_y6o1g;A3WIz92r;f4zJC*%KBN3BrD0oRLD<;HVqQXWl`^n zNZt!Fkcouf_QZh$rkc;yY~_H#q9@fhXxCsqch;%b;dY$^S?$^t-LDhG)Q{r^*@d9( z#l$ih>JI?CJNU7NgHa|bG<>TXuz+e&r3BcwzynJ@GWN+t>O75m7k}@X;7J8nC@D~r zwmZf5&?YR#f(j0Hema>3PA*p-iOUUk&5nyD#3j%t*J(Lc=4nliyhqY=5KfjCgQtH33sz8c28F@<()5Pcl*K)K^{Cw zZgFH^Ruvz54UI=DSoWUW6M27>kSWLQr^hakaQ>eCYo1lFOXm>bo5WU}cebpwy0?iE zZVWwFl-csf{;`;+FnsJewS~52U^llD!A|Dls&b+D5tGr~lz-^_#)4<{RPZU(Beqcz zeub^~yj=e~D@Sp;a0~m@Kjg2U(JZ-<9%FA_1gSGCvu)yPl&~TxV?Hjs%yfSA%)!U1 zC^xqK6ahGnz;OmY-GfY0ta8x3sm9lyH}f~l`KaE+$EAe!W9N2uv@Lv$eUTVU*s#c5 zL(w)B;E~FaUw=T;_C#?;r}>2nI3TPQU)j=}T$$R)VnU}RL*QeZa8x|r59o0LD^IXa zMz}H+w=*5FU|z*BO9ioT`(NQ+os`LPIqdFeZ{)ChaIdc-#j88# zarth^z9ki(0jq~sh2g=w^Mj*s1%<3P1yt?f;#3vp-OgAZJ|2zf`g;cLgEv|(Sd8ij z0XdD|N2Fp+`4t5Vn;Zpj)ALR1WmV^5q5S(z4zM7j27a8j$tI1$U-gT(2kVe|bAK{Y)=|8(u!zC&r`O&$ag`T|(L(H&VQ&emON5lh{pg3T!Sys> z(71i!pdig;=CHUC|EDa3QFZ%Fyt&EGlYg`74Hef~90q?a6|h=-@Q7v?{~+fxX_hyV z0hGg+>r(o5lX@H1In}EVBfIT}Hh5Z!lajd(*%NME7Q#q7EWu1cUl&c;ODAfGB&adx z5Dt*j5>Me55hT*{W=iilk5M#gSo=+`d@s#9$5Uw>Q#raqqJOna~5-%6#%j{BX;y7al{hm@6nt?0(M zKue`l^|gYB6n?t<{QF2+bZchS#LY74XY}|t3 z=V=>e`=aXHEzhyDDIBK$P$IApO!?4Vf*h&}Y_nbc1oa9bXPyXuySHiY5~R@S<1c>e zMLpHdgSm*Kp|l%?*Yt{k-a06C zM?V$R#aeUtIBYAZ`MR@VDSxTmZulfKpr~KKYZxv7Tp;5YOCfcNWwseC5}8qu;0>JG za$}!4eQGZ{dDxRvTUhED5SV3>-w{_Rk!$_LT2W8R=m!3^oG#yo{>wf$k$tS#LIYrN zO)ULA{Z+)g;6=M>2k@JMKzt6-trE)#QR{0epSCZP!dv9cUlmC!SbuPri;;=JLkOys zwp_G-FL({qq5+`+Fvi!LA8RZ>QpW)gKKA!A__YCxn4kA9=AoU+M2ola;#Y?3W+Yx4 zE3^M4P>Pd`?K(eMCXa#!;F_5y)(-99wQ=Ye@u=F{X{zrMl-S&i z@l{2b@3j?VX{76qS8P52u+3_vqT|tBewK@@QzU*wo2W^zN(Mc{ihB{29NOR*G~Cil zZ)gTKZoqom0o4z$>Xnm?%{6sm$N$@4Jp`=y{`@jVS;L8j_J2vF^l#!4kt>~ZF8R0m zx^L`q-{wdpZRlxZw8fqd-j`uWDYIT2L%AdWUhDmhHtnLYQCNhvbxii=QOuDVM5^LE z3Bpp=R9^0<{`R*npXUkQThem-O*69qvG-D+1C>9xy;sT&wyZUPHN}>d1b*mA(wV6& zlFEw|Z%WZvf`4y0k__ORm@T#*fXmxbkoHsu&&n6cO%%6l%L4mOiH6#W#1(?&m*QiV z67t^tJoGGj)}H6bJ9A1{oL*3qO&>Wh$95I#_ARFS$0`6r=weo?$IdLxqreK4O?YEz zKZWiKMDRds*gRDC*`S6V2x!;rXZXj;{5KQNAn?v*9)FK!52oG=G(PK-5%o>(;A?S~#_+Z=v(vw+l#{q9c}5xVvn#q#4f058VC9dg|ykjYMa1&#lq z*s}Y$=nc?plK1)Hu{e*NcAxO~r^4}wZ~VmabN8iNsaO&+L26|cE}C$_@8nQgV!|Yo z(tn;0Oon>mZ2{BCIPLh`+Qc|U_zoV*X=Y4TPIFnyTe~W*FVjjU(yt(o`j2S!$W(p{ zstqm_e~>)v<9`ysH-(~qhr9Fgy$Tzd0PLa>>f<2dlOYaWA& z>hxrDo|R%g8N~Wwi5~ptX48%LsWg|>Nm6Q**Y(?Y$6Zd0Pg5f0>3?cQr5!T(h;pBi zz=d>AbGxn-C#+Oqlh+{4-j|xqUnA6v`-xU_GqQy~p>;@6chIkz{+7$rs^7ocD}Qgq zA+B|i+)<(my@;yR_Lv|aB)c`ogEnc zfmj^0Qu7*Ko;M*!9m_V+9eJxauzz@g92!wM7)ld18&nx+7>X3TfpBcNE-83GDeIXa zO^%l`3Z|Ryz%!4D5WdMkt=F3EsASb`?{dflM@3h(q1b*la2A`}BH8`ysouKZ_zytF zPr3Q_8v;SyDG;-9a6@P|o29-&f2&~(T#ZRj`hXSP8E$hyDwcOb`;V@H1%KWBtsi<) z>QjyQh>C?Uru~t|_GGj_>lpNKqk zoh@;0)8x>iUS8YJ#b$Zfv+k}nif<7_J%6-NNbS3JsK|pdP+iGo-e>rjF_?dn?q=61 zIbS^yej306rspkkZwJU>Cz4%HhDLjD8V1M!y>zX4Am(0+%PG=}EPpT=U+ZKF5_$}Z zS`(NYtNUswaJp(A`R_83$nRZ>WdXy*yzO_dIo4Ecztw};&c#2(U^p8dZl!%0IKu~E zp}{4r1miOo1;^qgjR@hInQs7}5x*iwP~7mMV*~^bJciJknF{7w48jinyW~mo{C2Vs-wqYH$i#fPcBdoR@Zm^ zkNs+;!zH~hG4(eJSK?N!zHNO{c}uIV_U}!71krR+Lbwy^?#t)f?wT!7{7Yo7-9V*u zQ_It5hl=~}F=D>M{6{xua3lIx*z{x7IF*QVu+{TZ-@htou77GHCT_BML3JQbd_Y2E zElkS?L|m|zq`IKmbhFdEWkb}{qG6V`i!^0+1`^`B7fsX9%|O^!cj94fd0N~c{3ng9OyguK-0J+}Yoksg zi^32tMH2Y3VGJ87s0U`ja779=YW3h6hjXy%A~@SA{J)Ua^!828 zK;csKuvNbz=}8Cf{Cg}!`D0o{i@JqBiu8{chkbO1WPc0qZ;@#Z(FxY#Zy7J~0za#S z3NG+Vq^=0l*|97hfz_4}Rgz6H4BJ9188JwjJh%t1OeAq)GM?mzhsu4|pbJ<;zs z0@28EnOrEvaEXyGw;|w)6Sj9RyQ;raHA}z_h3)!}B}bWwOV0Vop^M}kNr^Ahzo>qh zL8^X_LVxknc&mZMyodPPX{vj&9uoEBD)v%J11p!075dcXfXrWjT);1CkQn(R!ee)(1SmkaVF`^&daZOQbS2Goz2|C_V=N$im^`r!p|e z-U^v6N{*W4q4bz+bG-$`VDA0~Ffi-39)g=-E`Mf+@%gLk-e-Fv`A>kB!AK%SzeetF z-Tm;2{yBn4hI$kvWZ52r7+SpHfT2eu&1){3sdh3ooh8C|(%LK_<|47S2B1Vs6CS2C ziS6ncHL!lFTKmOG3ddSZ3UpHxwq^BY-#2OFC!XcW&Ch1doAgHL1}ng1QHcbt#{b+H}JRDkNZGuBSa8Gqd2`Cw;2@Ypa2w23AH zd|YuzQ8Z=NCYh^K$QR*Leal-!9#au=oDI#E4Y#r0j{Eshw*M@1ztZ%*n z`nfVzPKeDI;~593snB=62ce#?WLIEs$5T@M2uEQUUHi#Fx6r9t*;$$*Hh=Q2tb(5|M=Jd6M9f*4n&JXvS)$i5g!Q4Fe8b^Ushact#fC4lvM z^+e>UBCAUAoo&iAh6^#mJK8Qg?!#v_0^X?FAJEcmZL(#?zLuhSm)`hPM4huYK&hZ( z)+X37U4_sJ4iL-+AR9e-wd?Hyn~1!wsd@5MayM`x=V1^8tv$JV^bkQ zRTd#0xH#gk(wv>g9R8zDDkOiiX(l7{<#h9@s#AT{dVox)llC!eQAf#vB=7= zw0ZyNaD=;`4LXG;2v~R;$)2qxmg9Wy9X#h}5rxclmU^344HqopJwrLstuq*xy?}1D zH#jCdf-_(VW-g0uv46wKtg<4Wx%!6pN<-*^C47;Y0wXE0n`lC^da{?*lA^f?Iuuc) znc=CtnKo{8iVmL$#{`TYqTG<5Z6*AYk5l^byK9FNsNVa;@GFi^>g+P5e`5*6KKRay zZ5FZBKN1{uh15-g9GWXY!+`HpT*~(;DBFcco8UjPvhGhCOn=~5qwB85Pr=EeRl9qi zNZLtj!(m~HS0oR~8;qFVE>@|Q_#gU}S^H9aN^Vs%eW0clp{d^;R0iph#a(>LAHZEa zq_lh(l2j^woXx00-@Bo_DfNsBSdhf;_Z) zZ{$|VkFByDP>NOVA|KdCf@IcE2tA)$&664406>bfacNL(^VkKFV69*hHxUBkdvdiv-kpj)9ZQdjq~Uhm(;{tKa6o00HxjF^4A?0koHujvkeO$S_(71BF!$_60H zVdU~Ggn#)_qF#VJ?lA5W(4t`Tg)CDGYB{&|bM{6UhXh*uEe9-AFicQVYNskWcd$cl z@v_(2!39FHi1}2RhHm$99$k6UIy3Pmt{q_lHCytAd$SvwZvS^4z6YXwb_(X}>16t+ z0%w~>{^s0iu=J_@$O#kTmG-djA-HAo&S46j^?#VOsr;DBou|H0DK8*@mlVcVxy~I{ zIZb!m^Dz=VYAeO9W02iP42bL0yRd`;R6y!G9s2`V=Wg6yj78CXTR-= zcpT1p%HwOAoSzqz%)=R>t<2gPoD8#sRQ%ULT9~u-%ty)tR@N(2HAcD;Df_Pf< zq?_cz1tF)A!5cug6RUn2C?gtO0k@-JQFy=aVVY~@iGmZF&FY$_+{)+r6q9ZC^%8Us zBIEJ;P?KPC>?oF@U(A%27Y?P;-L5qf_AZK`Yqb@A_W{SqbxpFW7(U7luaV4P+J6Yd zO=IUK(`h`kl3Xv5E}^Mgu3PF&h{n$^LZ^v4zklDKwO;-!VfUjG$!-Fo zYyd$|-A}j5Qc)4M;lf_d2DB?YN~aj7-8~Bn`i3$3O!<$A`g+LvW;9I%$A5<}NL%XQfjNJibE${dQoGBY>S8!$GCGsOJ0 z^jFoUHC-#(WBU)UmCoQ!XG)WMDg7TTmULs!nwABf^>7srttgDt-cu*$eM64l``Ge7 z5$S$B=VwyBXiswB&y`b;GJj@aLnY`6v-z-8A*R4oJ&mLQmnw0FSs}ayBBwl2do?x~ ze$lWPn0Kzs4ik!UY7g~<>M&IEK+9aJF2StLmzI2<5aW~~IdFGT*z^?%{E8GfcoAZA z@sA3O?iF`3wxm9plAQ6^(IEsuTWb)N%qR!TIMNQa`oK-wqb9<9+<#l|I!sdjc>DTX zK$U^b3IQJ4R34PQ{3=ZtAUl8dB4r%a?syylsV=rP*oH&iiuZYwJ;@uu16Ak-PhIh3 z(8I3Og|72~Zrr6`EhB03S!x7(6~684TH+K;6vs;os>RbyRp}iJ1_JJ>XX7o7fJJ2q zCA?;7q24^L%~0>P`+t~TW#2CrAx!B85jOR_(Oy5V#5m=Um$E0UQknZ_5Q=={Os-&< zIJN=^d4Go@w{p_1)XP`!cgW925cl1YiITT~&f%Zkq^;6RE<6@Kkjf$2;Z><`?2j)R zswl#Ph!f8Jf!OG7`Vo?Hqsj9CKS030+ECGNQ%nL{_}=dIqbf}Q`7nPU(sq#{oM8@| zlYL1dHh~!@eR{VL<0K2OFVGc+Ib{A^i0)k5#jUmASX7L#9L^7Y%|-hg`2tutlcz>n z`~6BUIFNE*;HyJ-Z(ox$A}%#Cz~mRNKOP$-b*JXBo2JZ4$gST<{{e1>&fB)=JrCP% zy;b=@hVHnm=oJ1%@k@V`PW1(1XufXz3ZEWfwAzZKV-@L(Y%OV=o2i%%r{G!@Dm2+|kFM97D^aS~s`_F=rLYZ92+ZyEZ`W zu?EfE1dY#4v1?}f9EiaA_Z&jcmtF&~QS2tZj_Qwr)3lnL^LBsJ`>#cICp424170%c zMN)5pm3YAy`-$#_Ojm@t1or77#NY8`VULEY?DQn*hpD-6rUjHLNyQ|2L;gvEF~rz` zmT8}F$uN0Zwg{{r2V>7X8xkoH?GUc)|D7vOQ$%*(rg8xL6^WS9YD(|btBMrCVAE^N zrSjE4(y&p|yh(pNQ-jrcc=*Ur{$C(JpDSNj*aRqLM!}n^HbZUvkkQb)^E1A2z^FN8 z-!+y?m1!=01LUir<8ry9KOx@qNB#%;gjb`SzAJS2tc_t8-|s7(wXCo&%@wBb=X`}3$8UePY0%NsrCnBMP5f?M5PY)+ zQe%_m&Bex03+Vn0dU=P2gsJvfguN}2&)vQ2)R|(kwpmYN8dk_t&8Ycns!HaQY7tME zhGthf{;h{#IU6N9HE$#PzvjDP5D~SDbqOEA8={YIH7SFK#*`3aq_WuSbIRbrH$K;; z<6V4uB^iGfY{3rQ6u7Epx?F-Ltc#j>sh8<^p+o$RkE@+F*WDg+O%s>Z@b-0LUha(V zzZ)@rqV;?Oh~tbT0s3T|G}JzJ-RXAo5}U^kt@P{C-A*Myd#cw&z& ztO=>`b@|I?Gc6@oi{c{al6#XAhhEW+5L%48XcxNLHTGPvO4BPDBxDy|&#y=Cf|fEv zBJXm^Q&w4Y|LaIRAPo+chHQX2;tLtoGb+pW2-4&!0<}6ptR6-|-KbhPAZ!@MDLP_^ zRxy8Cq7Vx64HB5ULTxz!53i-#q>FbM+VsGmrR!ollW_qZtH zxWEJ%d@91-)L;q0{{w8uqeRCJFm=U9X7+X1BP9ELbQr%xCHk(7U| za(Dv_FG#~?m}nMMS}C5!Qq=MCKtyOMpTN5H@u#wC(_|mW+7iCyFPbC20n+gK6!<%P%jpC*>54=+rur8>b*WZP;S?o4?gZ<9Rtt15h)eHSa?uNAzG1UA zBc0{P-TFjCW^8e;za&#p&o2l%>KuP`G+b6wT!i=`kJqsy7@Rfqnv)#d=K;}v@HYU%e;o5 zC7l}P)$*Pw_N4gY`Le+oy9a-5QUa+jr1AGZ*$k8mDL4!4E$a36@Mz)iN_m)ntXgRKI?AkaInPtK4k0nOS))+WSradm9~* ztPS#s%@vF-9uYEuEDC=@F%>pp`pXp^0gL=xvlijFbdkAiBH_-SL)KluUkIsjZUJ7Z ziOpF*v!+oY;%sv+0_!031`BT7@R9PoMBtSr`L&y*Yq(swBAl&n(D5%~M6!VAh3qnI zl5Rlg=ZPr45;$8`p0(!&q2T~$AJkWe(e-wo;ZTr7M!*3{ZbE+nVLb298bhq+j@K_# z7V0A{Sk@op@;r9>R2KD%CGia~o9Wvk<77S4Ci6}=>)jgwUr4^e_VmB^n?oPyoXgmr zQj5xhAEFc8Qts1oC?~@|5&w6&`d3#=0# z2R9?}I34lKV7eu0G*&cL7WRf%_bLGjYUM#Os9J_=)+(Uf&FtdUh>C5gwpp^-q(GlM z0VhWn(tKDnv>M*PwQ) z#OkuT>IK^GUE%7gsr#;2ZebIB`z(X#@)nDqHKpY0c zY8RYW6YEJ3p5lnq$@}k8h~Nv2w@zW{_O4q4CJdEU9w}fyDRtW1c7uL8#xCYU*gQ~> zx4YSy-`#)bAHEs4Rhh)i;06G$-UO^7IXW!Jx3PoCiroR+!44 z_NA+eYRpUiMk0=pT(-`!CTEyl2E%ou8RD1H+_?@?Y@`elyeKhx{Brz60$`dQCp}RP z89Tg6CN&(17xRKzgc_&vrRWfFI1pp~6Jkl`rYV_0Xl+D23Tkw~~t8Gw!s05QmS;r;=*@V4vyu zF4;(SD%NLjmRQJG++FBaLhuwia+tBJp}~I~f6G5vFxx3;%Hz3&5#`EfHY)GSX@diY zDM%_ueL?@mAewY&3NeOgmoq_Bff;1E!qGOHMnIcARRqK<_AiiDVvH6}I$M6Y4g%t| zuqIVV6+;Mvc+xIS283n^j~Y+>S=9(FF;0y!mBSMJl753fdC2ny;Ez_Mv414)wjqD( z)^0o_^e?_#T>x9wwu1C2;E=D(9VS5N?Q~KUM`$;@Q$Mfzmq3oG{9N%Am`S#0hU%IT z->!)6SkE^qrJ^~%3XXB5jm6*MAYN}0(RBJ`fk)6uw^gm8T_8KiG3`{uBp<$O_S;*) zFM_`9hHwOb8pshgF};!$bp=vz(IS6eh4hq~7Io_5`#!6iiBw~mDmo{pqpmS(2rP(} zaXrZJuS7Qor6%(3lkR~?W_S2BT9M*q@YW0#z&}h+wRDaoM-D=#xX}Q!S~C%jjyvdY zfQ{`>wv;}1o1IS?z9yh>(k1qWFXmHPQ}6<9Vp8yZpZoB8li={Zl*sSu8Q_1@aQukD zrLAb+%i`ou2k**_(ROhP;ktGP*Vl<9n$Yx`y>Kq!#U`LtCbVh3Mvd{Te=$|bYh5K6 z{a!}xy`g&L<*vRa!Y@x2US32Ha=nBH50Z#pvrdOi+_3tmmT{DFWg6{~Cjz4@$_Ka) zcM}@66$Nzhxf6d;QiQAac36MTAP1kImwxtXJ$)iH(=C+Q-7>-15K_9x(j&>HF?T_< zILw364X-*9D`P`%xWhDgI`_n3vhQv=>Pa^Q{$=7B=3TUE(y}lBRkA+T~)7ibN*v`E?+hki#UG)8oW>=2;N79 zQHvNzAG(5GOZV#)ec9s8Wyg4fzvAX%1oHlFHOn;g!u<~kTCuAQauAZr$^+*z!F5JZ z<&c{7F!|m=YHTTdwNT8G$*bZ1zQv4(TL^Jx0%|y$9A5liMuf8lnIxF(?QI4twpkC2 zQ8wc^Xy2Ivlbo`1M{R%d(aa+V%O7K$Zz%r0s0GzPy2AI{t`*PFI6~p7&w1HdmG_ET z6&63;0CN@(Hg6ik`(PMRrgEwnTPBE7#mC z7MzuxM~~Rop`OPFEm_LycPW;;=xOKD`s85!ho{QC*@C#Y_4@h3 z`27zM`JoZRRCWp{_Qwa}_!qz>H;9BsF!SvYYuA=9 z!cu>}JQ8oALNR4@;zqgX_*g7>uR*|GVDcvW$C6fAO@6>TFGrn%g>~v_Yh{R;$35hG z-}8uKLU=XR+73-1t7I!@1(t^E8-U4W8a&m|t}=H)j6ris?52vm^s{RGdwxaz4bRXp zu;RUB0ky(Cs=3Osw2jDZ?M5?Hv|7V9t0aGJ33Zv@>khn5uT5dcNZq($oOZE)xi_!K z?^gd%PFX489xW-~NtaCdU7M-Z*wQ%KPE2(A1U+sS%||i75;zD6QnvviZ>fiIto>3EE~a38sc$cEtZUb($kfv2*{XfZ}&am12L@ z%vystK6r*QM^f-6Z?5ip>law9Y34h`UQs~g5EEOH_z%-Ioa(Qi$)?vGHzTEEtR5FX zt6s3*e9VqDr+TE*v+Q^|gNYPtS^3>i^_{xOVR^Yn36buzD3yE90*|nOQ#5 zbQDk|D6$HF)}&XHtrM z;FeeV=^5gw<3Hnf0m>t);+ug!yJEbP+NgLIT;3Qio2HW;UE_0qr{;!$o*h@LzR${o z8*r=siIF`aUzCURZrh?T2NpgP;(wq~dza^MdxxNZMll~YV$ys=N?d<}A6COBHc$xt z7I4A+1|S1kU@T~OU~|t5?ej7kf*8*Uvpad&plOygP{If>``I za|LhZM|SptE?9qy>8r9jFA!itSeQ`MGAym-UGR-;&==MsIAiS+0lQy$I>P`0^~liz zGW5TcJGKL(T}cQyehQ+fJZj=Xs&f*8s7a*>+7+UD1FWVY4LxxE9`eb%lT%C_v=Sq@ z$ruB)5#nfw&_;l zVxg9yw&@reB2BaP6@Lt*i9X&|ZSGyfV6J^FgTv zoet@;l_mu)OS-RKDc^4%ASnN!!sw$`07~H79D$TR1z?{*`D|_CH}mZ09Q2!!{@yW( zdnPF@t?9SJsc|7T9bunMrE?Wjm5C;ow_t04(FI`5 z%PW7B@TIZtzRaX2R*na5tJF-_|;YVl*juDX^$|6J>By8viyk?~&np6Sgr znbGrdH-XQun{ua^sD8L!j$R+_+I7-w7{PzV<&+Rb7tG|OAmD&(;;1RO0@$c`u9E7a z)nl6!#P#nLeEXFcLh}_F_4jF_{E@)K;D~b?7A{RH@ozGOpnL)UT20FQU(vr>qfD<@ z1K~TRK~SW`JJB?4l~yAdZ*@7g5SWKTS+I4NA@?cyd$xWgD-Am8lOv`j=6}9KTF`jo7vr^2&eye1|}TVC?$7 zn?6m}lhUFs3Hq*c0s4`0p3b@|FAuU5q6S@N53)o zUEY>l{XvLXD^(Vbi_~~~obHiOu0@~SxJ2`L1$e&0#WOg>%BeI(D<-`sA@P4VT8O#z zckkj4U$M82o?UOHWdGVb>pe>ahL-e{o$xUKB@s;~6{QSJa^P>|T*hM{_={={=$$a4 zCwc;|DI_wyZX);9{;b*NKRXZ7O@$U0H$8=?jsdxB8l{j$`IOEEM21)$((_x&wQMu zncWOmdrGxF+k|F@qv_*pk}rjp>?edN6)CI1rv|2@u`Ro)tZ4Bxe&K(RF0e>y{zr4j z2trju1)3NjNG)TRV)`O{)6zKnlzB=`(x=D6U3&Vi>&c!RG=LG=*r zbG`?lx?0Dm9(}jmthJk}6-o@TdF;{h!VmK0uQe{9!tWwavpW)CWJ_oHJlB5-{c;~w$G41VtdQ;d zAp66Z7aPQ6Y7K2vHQq&Oo8O^x`5X!zu{GN$B|Vh~Vn{6^Jnee@kTnQAlZfO}#vUX) zj#zk>-u$R8n~t4zpDi_cpI}I_UHLqfN*k=yc&Z}VmhK5+7@krzz2aScmd~d7OB;QL zy0VHg|CG#_|1f{2u;Zw6YMm~3|DOnt9l9u^#2MS#9n)}M(B8a$_B$DC*)LMxM47wj z+(n=jl_j8vUE4Jb!pCOiC?v^Fh^o>oLrp77(nuTY(~z3(l-q5AOto!P>>1ezz~7_X zB%w)oN!#fY`TIbfd=taO4rNoHbqAVTny&b3QmRF1agTplppGNiu?r7-2EZQ?4;nRT zKNUw>@jKyL<9{zBAYEbBjujAy%8)77Iwe2m+)PfbD`u_7auc*iG!*#;psu2_Ae;YO zzJaRcQNXz#3so;`y0?7!iV2UT*iFKKjNU!cP$;X4UTO2RB;$2!Xp}z!mFqZ#IK7F9 z92M$wsmOmwd9Q|hvIS75xpql*NtZEBQM%YTt^QO|&)HSli^YpE-m6til`4Ir>rgl} zozoUFn^bWATrGq3p~ertV$mPcuEEXN%txNkYWk4SoNu$StsiriULEMm|H>DVk6c_e zZDXCj?Pw|W9?6)`Yfl|2)t|{he4j1=r*^eF*KB`1L!vvSSiYU)#q#v}by@&5^vpFi zO4si;*SY^<|H>lD0p*)a>JK}`!mD6Jyt24KN}VHrivH69`1NI~;na4QHinWd$HbM7 ztK4zmf)b7u>5ad70^ID)r+3xKu?ubV=jcA-CR?bY=dM3wD0FmSHg0VH&1xIRk&y?A zp6-89WIv;T^^&;WAU-u}*d|KK6}*fX{CF8D#)Q}g93^FAOAR{@x*#`3RI!jRllNa? zjfFx?BfBXa)LPR!ayIsI46<+FLrJP9C}(c?oSx6m?@S~0EaU!V5F5W+?g+;v%QkJZ zCfW0G)vcX7Ma&d4dZvvF8~ZK?F%V6C;}ZqJjKcFkKT4F*R5B~gY!o}8i@+KzvH zCQ?f~mJ2CIFUrIpK7Qxq8?{F}XvH;?x(twc`HpT4&pmu`cJB4R zgz62B24CbaW-=`!f4ztdJ>LLvO1V-pa}hh%>Wu5w+d*3E1EWga>mM0xXUV7zH^9}Kz}Bg+3H+HSaI)I zvQe9d@o|mkfPhO0V&Bv~@mU+M24=bjcT2oEJRAzbp!^oa%*fp_$KPtB(wmc%P3gv) zBDHPcR9BdO#Szvn#)VHw%2a<{cSs9^Wt-N;IQE5`Uo@&TSWr+NRE;q)**Li{<4>oV zCCMS|D(<`GCPrbI1|segJ^2@h^;AQP4~fnWawk9J7P3=y4Ih)yrwhiO)z=Jay$}#H zBXbi7#29PVB7B!L+e{MaE1zbnkpxhVWldi3A7&O}Ii_v1FGyEOOmu(2*5hBVBJz;{ z?qA{U_>SL{+`pn-X)z76@Lf?LpM%t9lT~0Z94eMA0F)Ex&6S=I(ZrO8rb6W+|yV%p6YyMe1BXz(FV@L)@-9lyLz{oP$!~# z5;3&0>lQ-W?K+>B%SC^Lug(QW%k@3DBdw@5SX=u=!0Rv$=#Qj9g^>BrSK5T!DVXDK zr4>qn-T;VGFL^Ne80wbbKVZrKYOHVVWy-`eAhdpW^tA}r(mQTVRX9L|*f+pfbVGQ{ z8=xmF`{xsbO=+ttgxK;Os+XIl8!Bg;)-)d>{tw8tfkExX@|#snLJel41hh zOfkRVg4XwTuLp?&dmmCGsUVp>W})tzM^Lg=gLfjzDNv#5o#@hLV2+Dr&43-;+H+Tj zoL$)FLeu1n%{zZ0U7|qF2>LuTD3ycjns)uO?8G15#-CP!{(#`H_l=0@0<2|wAd6=k z12#By#EwT7t3Z!l{xqJqQBFaE%69jkn1J^NVvrwA-?rx)9%GNq3a5$%1KQFJiim$^M}-iuvKqpc9P`_3_CgVg zO|lCQS}1h55NVN8kzjIS%{W(^37h%V?d;s@$Pw@|9V`_DDJz+u*e%t?OfUF~TkU7@Af7+A%S7%s^mk2z&#GsmhjHli*4rZ0}}YhVl={0DW;G|HuP* zF>HT?nt%2UaF5vf{G!IDyfAf#)zV_y{|@yfw%GV@Gz^CfjSQ6(FfDOYp_8LCfR9z# ztSuGt!FE3H&~7el=sLH%dvGAq%@bnpZ+wmH5GEzoVPWsfA;8Br4X`P-D2@Dv$}1|V zK2lKPFW>tVb473!F!KFMs)@rx2z7*yI!=Fwi@5P@!rBV8gG`1zQE^1chQXr<1i8@X z!q9X+Z8g=P;BP2$`swKYPNr1 zF`GhHs$x*%brc%i)1`{17OQgKi;T>C6^A_{Q`}#bX0W^RKP|g zPSY8M!gk~dmQlN#f1RL$D81@YM`o?5TH;__nO}_%uZ*vMvX#$)e?)0jR^fmC_inOZ zl?$mIEP-uGC|>C1XJ1M8RAjE?olpE%^A7(Jg~1ra!|Oi+pb8oYm(g5LEvpQ-8c(SmRA+YsSuqW5SY2QF|%2$6}4a*Lp3 zd)e~GyG?WlFGzf=Ij;s`A8_e%B(6q=Jlp*~g+d0;y#fXVnC`j^oy!VmeS_kN0jF1R z)i-B`qw$c|&~fGzPB^2*qJyJO^`m@Iv+V7w=!2T7AFr2ci<6uy%@2P=8Mh^rXk~K_ zSS+F{*6e{hu&jDeVY~@8fH0?zZ#+vwB{ z$*GxGo!VY#MSN{;y#Rkk+g7Np5K=Ojcy9yq+Y%DF@KmFx?i@k)U)Xb7L+>Au3#_d* z7ILJ`BXma4(kT=NzN)_>yyE;y3)*HmW#`dlrwvY+*me1rtN#$pa^9!?-YCz}?$gI8 zw2ozkwI(OQ;X1d8R>r&9->!sHeXgc+wh}%Y3Oiq_-SPNvwx55c99Av#SoHDY{sji6^w94S-C>q@;>%#jQI* zExWDV==VBedF<9?HUJ;n{F46km&95@Rzk$7QDkN$V*$K+Iqy&ZsoSbL;xQt)U{(+C zYHBW&C%7X_ubF?(ITqHAO8MZ636E{eaZ7#!L=;Bo(p^RsvvOjBgf}ErJWW!gwf$D9 z#wV3ZZTf$HVpUkSSm}(K>&vTRSaeEtMSM(k)%`sL73t4f9c81SFXnJa7Vqat_@M)KM@p;z7gR!-ViKl-P%F{#-8%x_P_FI`5qqH@IVdXaB zr6-MOAq*(^`#>A5K~$e4(hc$0Uag!7*O(%Y%bM>D*<{c!wW+c}`Q{E~{loQODmH;P zfK^Zb@Kcn9>7n=Q4o;nUq9la|=JUP?XO9f1H)AmX|wg+g!!`l)Ut@lLEUlSu1U$jJ} z(`$AHSOb);LqA(d6DEWwC;tvrq+Qeklgy8mvIwO4okPUMm_OvvfcLZlnCR8*GGaFn@|F&HO*gYol|_JH z7LLCfq@jGT?+A*Ge`MOVAHD&!s!0$t010OpaaqVDA%M)PW! zNq_A-4PgeQg1^o-1_Y&orWp;@&)|PjE|^S4>qjx6nZJT;Z4DCx2AMMd`gVU|6;9ak zTJ^a%~o61)Y|!i_(^BG;e zl7^=d4C|-W`kj*=k zZ|@(jAO@!4ij}Ov_u73oqetmXCntliv@f-jD84MBJOoZKS#ETH$mWnb8WV~$u*>6i=~?opJdTlX_sjZ#ebEXSoHPms@K0K4%L_=p0lW$N;#LVv%_Zo6shQjW(_0Px9$@q* zd0V9CKcGD-QTA8Q2EC)`TUH-xb@E#OO#dTPv4nXZm1a|kW8=N{;trH^~wsJnD`b^d?x+%ElnyiDebSRqVvJw)~OgG`c(z%zU5gzn3Od}=7%x#Vy0 z-C@8Rz}X@Hcr41N(=^9vt(CqkG6)_z8re~U7oKl;pxA6|Pp5UDP*TxLHLt#SuQa$@COi*Sqo0nA<(0ckc#D#AUz)Y!kO+f?ZDDbLFyK(O*h7 zsw}hV0f*}U$%oegLJ1lpZFbZ{D}cA!vy8Rh=~agKCpAksm2N3k(f;~l%fA5%fqHN% znrOu6zuoVM@Wg-HwgzTirs4XQ-%7xD^Z~E-Tl|5W|04v{Zk!$aOqJY7W994OITi8Z z@6I1Rs(9zL7T>`EA$Im{S+6yNIy$-wXA5FU-l8_%l7xO;Kxau2PB`nKK64<^-wl+#t1?d1`K_N(JI+CYe%Lx>%QCy;K>0YO?rZ3kc? zHw^b@wdbGa1iwJr=km{3t7}g~72S%=-vGxdPf12ep*FgFYn%Jufjk>1trZiXoTqf& z!d#3as8N4NO3RS|*A?7gSpe{`D?Sz#yG}JZ*zg@}ael$0W(dLWQ%N3umNVCXRwGE| z`WsVmud4N;0noiqHesTV+I+R@P5H_DT6SkI>spM~#Tg)#2wl0lhX#IrMl4MTh}Z#) z^o;del!}vVFr?Yu_c-$Y7t;>jjQgv?MI%R7&6W8gPPY=QYYv3r}9GQ5e8aDnve={J_3jW9gy5zXq`g5=k&2VS2;>E}`B(CQqTo?vs?^6;sPcKf*VaE9_M`bAA zw#9~2n9|yB4l+tB{3=Q)e)EKbm~+a=axY?jE?ch0 zJAI8mQ$i`F^XmkGvNNX85pAubDcUh~^Xq@q|K4#)Q8xX>CT8Ot3NSbW781 zy~>&%wWa|BshZSVO*`up#hsLh=mTWAX-VBCAH!D#%#R5>{bG5TyY9_NB}pnOF>ipr zn03)BWb5o7c^7Q55MfKoxc50HxOl~C@9CUkzqaB}ZxbHl*bu)~v89Ika*RWE&y`zF z$$TH8H3myvWxRL|`)f*|4SA9cSZ06C2Lx?bpp<`NehT=yWC-O;?v2W?HM8z9nGlcO zMV_-g^)>`sN;7$UovJhsL^+q2HdcHC@DcKTk9o`x0Uy=_`x`t(pOydhmd79H!md5! z{Zo59mxk&ia9-Efy*HKUqSmbIcDY-MY8qQUB<2T8x>d6&yqbb6U35)*D>Q#9WI*Mx zevJ{_s09pADN@~_FWtuHJK}b+xD%VSn30$u_u21TsqMtlSOMbh(b5m&K8t7*r`6ijr$?9 zT!Ll~jgBrP=M+It|A)Wejjw--m~FmQvTn>k{fxrC+s6C0iC+N_+XmAvv6NKO*iG(RT+ik&Vi#vr1(>ewBIxXm0Sckl4wQEso2quedaVXRL5q~Nng_@r3LQwz^W~*&W z81uNom^bE8Rvcer_U>P9^+DS)P0%0hR@TyVL1aC+AlpZ#7?SJJXV}Q}F#-x%h%4aX z=XHEgMa;0}(*YRbx9xv0$=mwl_?yRa{r9o1Ti`rXZA6B4_`36m@jRU);B1R$gexRB zH{ZCX?4h^LxjYR0vXt22@B0Z- zm)0B(?G7e=sk5ps;bE!2A!B~={)j@4Io*oYYZL+Tb91k|#f5wGTG0v>?q}qm5Av?U zl@T;f7+Biezht%GBn`Sp7S=xeF`*= zR)#ICb+uEUwPc(Vxwb#3P!ht5|7*`O{__Tq2+jK?LwM=M^0!}o;9hf`lBBUY?RiXS zR>1nAsghPN26H8V6o(`LZ#$BoH&iwCVYE;AxLS+^<5&INHDyAf&DL%qgUKJKg!fOI z>u&%X%#wf1_f{)R9KX_4QV?^9tM#jHlVwymbQRfX|6@Q*%ckH)AKNA1qxaKsUQ)@<+8~R=gAr}F1>183cD;o7p6yvYw;Ag5M)D~G4vmbrb3$uvuWu2u23VrsPfn?=u9*6 zGd=30IuwUx_sD_9dtT-6*0d>iRfTEJZ}guZ;!uHMp=Kjq8A&Pw_c`#IUetzG$tfI< z`zU{Z);dDtLet0SkRnU7krSWJW+3@&l`XTHN_}Wd-M}tF@E({raZNw6TZ9ehW7cpQ z6tSmxD6Ix@{>jH)uRe#HZ(PlApJJG=p8pU%px`P4{L-#g6zNOpqo6C}&1V88RDMh` zDCu$i`2g#gTz2KC&!3AW12RCg$exyOHq;r9Ie1LbeMVYm2$Z@4)wC{5q>?jc?2 z7feK8IcV}ba=p@*PcutU^&ZAouzoBorbXZA%k&(7zw(B6i7Fu=Jc9Ky*Xv!tJ(HaA z`%jzy+GFv?)6ve9{KGVdk&Si4{tvOunZIuURNYINS6T$>zxPR`2Q#q+giQZ^^FMz} zAQ@>{LSd?)s*$~85Vs6cRX;3o>COy zWUmhL@TDn*^KJ$fLDr0gXUv90cJ(fwRoXfyp66H$rZTr7-~SvUV00U>^bp2J{Wj#I z<$*Qq!E%Z&5X^mXdZSY>u$O;Wvqh7961jJfB%(EtW3}q|P7v#mf=y2iRMS=ng?4wi zfwnHa^&D85(7$B>E3VFTwe zgsdZ|glbRHUs&(#l?eL3oL^@ zV9Wc1?)LvE4djBDs$lJEa`HMGkq$Kmg|FK?`ORuU3CS9&%;U1 zHenl37eItr!r^X$r!DF*;aA>jrdO4o_DKYloA$a>k1q3}tD5^#wxk=l=TkwJI+92yRqZQa7X< zC_BA6QrSsgD`&t&4Kbz5qi&8Huluk2zbvVOPg{<%1R(ZO%=8_m=gJ(AWl+UE!KZ0^ zs*yH0<*z9d`zL?5^ILY=H$ZqyK-dz=GN~D_`hWVT4)QVgQIhpWRD)J+m$~T8;S=f} z<}9Gl|8AoPh69mBkYjyvw3@6)IoJ@ZnE2Rrxuh*Rp?9j0QIFPApMSFvDUkyE$5VVi zPEi*BIz=Ht-%Ou%$v0DJ5G$4eyCxV1qNGAhwrun*Wwd|zbFlEZ_3Px567G%V{vo8+ zGByVG@ceDqEN|;vQZDNS9-X%-6l;tzU)?|^zmYPYd(hh94d9cb+>b1pvp}scS7fRs z9$FyV7o8lGlR6_FeFv%AjE=q_WOk{txFh7R!{#|;p;pzUz>q5IeRWW?5r*Bl2toCb zmEHh&X2XA01PK9R6V|~?{3-4)dR6_3Qx#Gfz6FRmp83N=K&p)8di#F)AK>)9=!)>0TNQZ5$o0Q8ORPC6Z(sshFSBwtXc9vhyvXLrni3Q*=Y-qTV&eB!rn>s?c z0!(s^t(RK3%>D5`i0C1}suZ%Z7qpZ=yaBFst?$#f!<220lH#%ot}6?Kyq2Hn3ZAM8 zXuW^%5GW|`q?7tSR$>0f{AtNL#AE>Wci@U?rMhPNM=u@9Ja?H$u2gx$4NAMXg7hTA zxi>N!gYqVeNTmb@P93(M@HeK=eY5yJ>$@?Eoqj3RTYXo6mmZf>=*aI$D+Im8(_>K%q zsfvzXB5`r3HaN|!cgw$fd;o43lq!Upu%9L=0jvMxH45=gDrFx~#W3+j15oKP2@HSn z>Kr9QkhI(Hv&EWSlm0=LLp6s2%8^epanx%I7Zl5pmnJwmJ|`$AOs`oq`mYR#`jjYi zc+U`*mOSC(sBR6`_`|7Tim_&rSxIdwmS;Hh5`y&;ZdL&Nv62)It@Isol90hCxuOt& zsb(y@l6!P|aZST{+0x6y!c|>+>iT~@+y)-f8)q(bVinZtOY*DHtReSbP;wuh!)jU$mCZW4eP1jioO%3`EEU5zV2e1?jos*EVKVdg*+6*@#l3rOnzkl!@Zm` zmRBp67?UW3@Zs=B^00*vzjNR3v}>n zW!Kzd5KbV2rF@I~4@_7GV5i?Y08ZP z|7&f&kVx6UG1eqnRDBk`1UrSds=XF}rLkv!`h>?%r7NKEJvLy#s9LDp{5hN}cED+) zq8_s-jJHe@4+YOnO&-mJ@H!!6$F3(}WE0~D*L-rK(VCAds8rFg-aZU!@Yffk?$FBm zXHIa;+!O)H_$ipZ8Wc9E)IhL@r;K-ztq_&jhVNF{z+Zx<>$@tg`#x4Xg6SE&V1YOX3SWp`fI~KCt+2m3|q5p=D&ei!;`Nqlryh>X9KRd#AAN z2APSy>x->?c`Cr5=#BK1Y^0 zsfB${6!)QV%k~XY>GMdT6x>ez2HmedHds>Lf?98;%oNVobs_B;u`3kyH91zOxC(I< zmrvq%o@gkPY$Q66QvU#>FkG!)rYA*7=5I$S%s7#ygEo=>8h(gz*$nxA>U^J%D@3zo z2uE3Q9SW{oS}b0F`XWySb(VHL&`CLyT(7i3FvZaf@>I?qSw^%pOIEFqx?XPK0=r@5 z5N+jufmzMlLmWbXdLd#(8Hl{|`Qi-#quAob@BEURd=Esv@^<}ni1sz6g|#!H zs>`VBd-n>FR}wzlgE*C=xD>ofFpO!VG!u5*gA0CGPQ3$#wRFTSqVI%yC z88}45H~>lvrivMMt8`wJrlmW$3r@nWSpN(|P@$$AHK60~>(MHIG`20bs+*}C$SZ%a z6&|9xa4>SqedOH8(U&ByNcB)ZFoVpPezU9e)xH03pLxk`4k~Oxp74+nj;dwbW4{uP zgyg#p2;mXR&da{8srBS9d4HdK!*z&%UV^6F7Ru88EPSm&R-^zf0p{Q(K?y6@7jl_D z*>n;)z%)REw#Gq!If0njU}RU`Q($y*J`!J=H*ZX9+RUd+QW)N1L8C9S5VVKqPE?|s zW)fIry1l^O57{PCnKX{JE=)wDK`+5Oy^k(Oxs%#7a43Z0)nyNxv|ZFH>uQ4jPF88x zS}@t5>~;dv86^5uxEREqa&oQARJOH%T*SP`WJ*gD_QtcQNKH3 z;Qb9YkVTk=t~3-wvK|-&BgSx#xP?OOxh%rud zlFV2zSL(%6{<#w@8Ioms;bs*aA0qgU5ST>;0CB3bqN}wgl}@>4+eKS{hgD*D8Qi@~ zMyC1m56hH)|6$pHM=_byWKMI3r-q>yF&i>T9<-_|uY?aXbs$q;q=!|&7CbA@11Gr~ zgTA0y2cd&eOhtfN${yV}b`@usKS#4uYMI!F8e2I+Qf(QPmS7^SRaUI2;?VYEva}MOpPrL1 zMpMlgVw?0B`${i^9bf=ztJlq7#@)*}Hux_b?Mkc+5_ zeC1%pO2yehrE7jWNI**t6=-3dmp|z}S&Fkm*^}f#;Z$1)ZHAHvR6CG@W?5hj`ptF| zMMMT=oz@o-AN(VsRq%=&$V!Lmsc6-d{t>W$@CuW1!iqGcn`)!9L5L%P6k7VTG(a`P z%F+(?RYS%n#d|0I3{G>7*;@BJRc|lD-xsmtkbh#d%V^SL81Ux`Z$LTcAtwZAHoc1- zyUW%7tvmf!B2c2Y32rGk?onQkoPPQSFaoZG-2g~K3bwTy7c3YGgf2unXG?gGvF?k1 zED>Yp`zK|V8+?~2T zJaW-2-3}={2SiX!4G+ff=%&-j!Ju*IO-2Q+K*1#NwSU`2t6P)A&|UjC^e(}6UvI#w=%EpL+%fu*q;go zsO+ZP-vF%dHO>nHWcjncyHOO`*!mO?dg!jy1>`Ipogr3L@%5%ieO}$~SE5{GC@c-m?#@cxndu0RCeW)Ku1!hV9>n&5f4#{laT zfXuNWekE;_S7XNN6$#LRm_(og~bH?^N5MDqm|tAv06sA(%X8c7o#9 z3Aq3-p6=usyJyH~5Mmd9E`IVsAkv2@+C9Agy7V-@G4@ZRFR&Wb)YrD|y#cml;c?O$)Hg9zX8xN5p!_~UB_f_oNjYy zJ|8e%mQ=j~e&^y>T0ehEq`l%;49z^=34O>+;Orb>C!0XZX|M!;dG)xGN&}bCKgfxP zW`2+m$Ggt7n_vDlJ&wdV|CAuZdO|P>3D9e0XuTkK@UV0Ol5V|X&g)L#m`nFbRSXeL zT-hkTa}ChJ1OC#mcW6;sawq}H4k!7IMcD3r(&2K!@B^^c2!(?6Qhp7-V2_!?nRY8a zYpvDS;V^COV7^y>9jhGjN-LvfyNoLSew-U}^!z1+g(mt;H2j4SvbDb^0@1dC`;4Ck zGf~Y3_grI$B`c3e^2gsHw$6gEUdud9uL#M}cRWgo{gGU@^3>KYYBg}^E$Gg89d(BI zW9yQ@@l`X;(8WzNjKlyvltbjXJ0z4HDvg^nR!JJ`@hjGU6PS3>4pbVAMpGT0zT?x@ znx@GK&;RilA+_yygugf8&8p0EMXf%>EAv1q5~k+v53^2{ge-QF?2Kth?Z6zVl_u4h zFTBZXK(~EN+^1Ja@~kUZA`6sqZbmL-?O|s4)&pikrmxHwD~STBmV5~VTYgt;%2YRO z)0LQFiu%`o%LrCi*dEjHEf!Bgxi4zl8pvZ7B2NXHLvoHU&e+@ogkD6LWTINEOpmty zW+S75YX9jmI1A>697;%)@`I)V#*#YLqYwYz!bYp+tl9*^uu;n4v{*VDiTG;YQD`6E zXEHTe*GtO6jTlO?BgtGgHt1T5e3UW9M&N=mS_#m9jw^QhCNkF!ie!fBWee4t$fw_E zvkWR6zfdNj^f-qRbfb48@pNO+4Kgt64={225KSK*jpVNVVPj-_%-SuoVoUIaQ~R~r zpyMi+dyYx7Urw18APFkxcC<>SDoe4e|DEiLUF@Y)q_E{DwORf3C!pIPqY_rVit1O; z@w~QwRl!qf?~~O{w!E-vZpw1A0yEn;X+>+??s)`c@{E!F5#rZle=O1N->$q39OPJ< z=Ucv92PM3Nbg;^P7gH{&tgO#loY!qS#+=vNaCgD$YL+sxB0d2^aFKMzPj*g_8Xu|m zvUis+GW$3V9P$G$os*|}DIVwb02E640qZn>ZJgZoPMtUx@d_Ku<{r zZG0p>gkY2|NVUdn%)cq4;z$0GDQ{5JJg@o{7!$ucbqsPR+Z;qqC^GaM?I5DX;Wa5F zOwgJhj{Refn0ifxgZk05yRaUzZVC@)^oMm!72IbSUrBwx!mNLm%dS7&`66Um>stDM zm`$ZbNdA*4e)Z7Q=G3AyC`BVE^h(I>k2Y81cE4H;<4N{u!?7it0wJMpJuutMLjQ97 z11G=8uNfFlk%`MYu1^2H*!4-cb|Lkhx4$K$$e=D3U#N@ZolBDh$Zm-6vR%`V@d?Np zf@_3n^zF3NPh#Ojs}B_xB`PO^9&(a@3=3keuYac2{Pr(_rRCj#UyX)z7ffDPOA_WL zOHxBLcXSU!hxXfIqb1FA6q^u8N;V-*sBz?qIzbo8pvm zd;oiuI*^Xm4IR|F6Q>xBgiRfzY3M$wXrXToDPS9y%_wjiAB$-cQbUk5giZ*5Rn@rS zA%2xO-H9@MI(ROmBvT!{UOfSF_K2S}f})7ZoZbL`kr9I#)*s9Nje+p|1xtHz73GpB z5{j>SzKyEtmStkL=O4+vA^uv0$k?I09qmb{#Rvb!G30itVG3Gpf;_EW<#4oA^ae=s zIW$*&O>*jQ^*y+to}@|C=EjVFK_R1~`-(xH!GG>iuICT)?4N1pDRQv!=J&8~1I!Vk z?i#c=F>d-uPEa99@RtfiX|V`>`*m-gZNKu`qxu; zxw*p_P@=QzM5DZ}sI5{C`9{0Wkk69(n8>534TS&~-Ew(U?;UBeAP&tvnFg~eRk^$d z^zWfDCC;|U#J9knF5{n8Q50b#OkK<4B=Zd5yyBi1g*k|K-ZX@t%Y#A5ee2b_B5m1n zhZs}RR(slEqV-RQ!)fS$jW{nt$uPB2$$-kw? zl5c?6+J`@H01Qpj(0Y6ZZ$zPLyMu#U(C}Y)fUKE@SD|(yu$i*9`=@FYD2`V@xnftz zK=6vqEpm@l`>*D&k_;Ja$??ZGz%zn+3D3$sU+V#!an|Y=pVk0>K~7X!fDjdvXH5IS z9F$x5D?|B7dk^J#D#rVGvYc!pVGQ3+ME+43HMS5H&E;BXJ$Ui*`B-XOn_M9h)#jG z3=6Gu?1H|3OebCW(Ho#zyr4Mpm0_5auf=r9i8{q6ae2%}dt3$Uhl)rf)dd~U% zG$k2c>9e8&b|$=7pL%I#_}+plWvkmoILg9Ec<`QodGKH}d}7sxYQf+E8Y zd&0DTIpaojV|I(#rI{?nlZty_E?r8yst6M|h%YKK!>)nQY?aIt zdyj^7u@LJaigUb7Po)@G-yg|?$)+aNalta^kKVY*9dX;ApPWZAq$0HHUUthE;zA^2&isd!(jU%maJgjo^INA$5FOoZNf^oJ>RzRd`;pt%oW~XtpCw zt|d8#sR%N*NWp|U?sR5Kve0V{t%Q8No@?->>D5U)uF+bopJy|&qum}-#((~-e*;X| zHawNSI@GA5*4hn6j`G+kLwJ%rExwL_aN}xum`3Ei5WE4(O}TP&bFaI~FCTU1SERE; zgrFhKiYW&PETT1+DFw-UF=C&+<-4bzlFkTsxjc1XS0v_p7c^$F9m>AUy$Q&Bv-YW! z$`$8<&_H zY~a3>%6LnOEo(xncZ+gG&7>87DU$_jojU`+B_ z5gkBerszAw#EC?l-*Z8S-%n)DGT-@6h}Xju zyROGYZpQ!CyuzPp*_L&6Rm5Wqn?Xz=UH!VvSuTH5L&K-UUdo#^ohlq5`j33oQxX`V za;JN~Qp*G=UF*mz%dyUX5qROKd&{3z{$Twg8-PUO&2BEF2#1Y!kJ^8p^6Rl{3uEHI zLiPC`K7GZNJFVFBanV>OD{D2V*6oUV9BxUt_j5tiw);Lw_d%{FPL*z4+2``HIFjJE zN@&V7Ca(f_zg{pvYj5nS8w! zVm9{%(fa&vN1auUaq-Z|Ew5$oKc;UfQLl?|#J!Vdr!Pr=#-0dR7>%4%m<2mcd_&Z(?XnCin1J+|OFQu^p>QEV|3bDCo!c4PTWU(RB2lUqkV zqZE^|E7To-({C3bp37?5BGQE3TO+p;8``u=8D4@&J{?+MH14!h;x>;=R-6o80d10X z)bp$wPl61Y>wV!Hz=sy{%__CHh(i-VV)g!r7NY})u1Rb;4IvQg$&A|XM286fZ_I4SutUr3+Q*MB`IS=_z4tRB3#2g=iG79w-)?i+tn zegvQ3Flg9g;d^?U97^-RQJSfWZIHIX?YZU38|K~Kbx~9)+^)LCnghdow#gan;?rTX zPeaS#&HKVbJh(2H2WWyon6H5P4tY58uOt(H4O7sU(&;ri_n?#wdezfcdA?@dCuKBN z@t4TgZkoSxY@8{c`^lb1DQ8F5_Cbolv;soQMDxm8>I-@?lq!N*Tkl%fcFE6yFeDh3f@j5R8CHf7J*=X|EjU8w}`Yv}2J zvL2BWJ8-^Xu@R@5w4E zuiBoklqm*YLYsKIF?+$wYd>_S{{h06f$2c5yv@htlW@o{T3_LMnBvJ0`7^oZkC+G&0l4F*GX~gGFqKCXgDTs~-sCZ`~q%KeA>`t10X?ZX& zSFftwyUEW6TVj?Er4{)iV*V#u(VkAbHoLyZz@AhK^&Qe4WFd?8l75CDQEFD28TtlT z4VYK;Ae)h1D(2WATe?AoQc7Ee&w*A19LkUIPbDn28)2y^{&)l>!5O6!nv*OKJb$J;g#8m9Ik}ai$Q#RCW`Ox`EVHt7 zo;YDf8T2C=gQ6YKB@A~y4nN~W4fUD?nIdAv_f|*&f&stFZFpG_syeNIe0ltmbU)Lb z@cW6p{dJTQ^OvgFpnaoW*=DX=xT46-KXXwO`G0?rSt8vgc>^qozy3X{net23E>FI> zonol4WFv?v{?M#?M(h)&`qw_}(+8dYN^+1IG|19->^1}G?hCD7$XxT`7oI~s*Bg%c z2$tvC-Qu{1?Bnn`+S6cvOJD5iuTmvuS29U3+@zg|0n`*p@<{Z}@M#IAFaKIgsXl@RQIS<0x?umj7Xnvj%iGl&`oe;~km?YtDy%9Xi&R+$i-%OL7|< z`j+0HOFcvDp-;%WF_Fj*ebN5n9=VcZ{aM0?|Zo29995KJl*$1bg zDw)U2V0qge4m+GUGZ7vNIno2EQfdzehYVe&(%(OVdkpS>RE#!}i)~sX%&=j? z%P2t~&*;&Iilj#(&c=g0BNIm17IKOu9W+YYQL+P1%8;XHttTN zWi@numer>6`exLkPAO&}aY_os(sISUUtm29VoBoKy5ZWsA^Eewy*J^r%$ABYq_f~m zn#c~-j;#jtJD|@1_o{ccD>@kP9fa#T`sK>~1eGLzH4puUYG2~^A1h2s<+9N9X*=Hl z0xwf$#FLABKi4hCmg;CeA4d}-PUU?GvA>=Z5aJ+463zB!W5XZP`23s7#YDY^Ecqer zQ+GqK!+-Ki9t?q$t`t&%lwXBU1-nG>+??|I`LHgCRlnrtI$(mCyJt(gxV>w`T{z@6 zHVtEcA(ga*wXCPGk(5T2#|-6#p%{JH#%Gn^4#@J7Hd;LVC7#OM!8sa755OTB1`D?Y zlv1BCS(nX_B(9ZJo{CWBE<%U~2V9U(CuN)Of{?hYTLg%|LdBnB!p_qXxifo%^d(#_ z*q4f*V}nIBjXXHEA(ZcIV3fVdHVop21>aqN9Y3um@q)7d`{c16e~{z@urVjijD6Xo zCc!2qj`ybcm-4%I-$vy!q2*afRio(__U7M`e`?4Q=7yF)sFt;FfECSv2oqlES2=k zb1!bBamzV6@0Ej}ZChR-tIfUy-x@~C7fYQYw)n6NZ?Hou%K*lKu!ECk2zapFcX2Ej zU2%ufu5QEiBL#^W15ra;=Q|gN;#qtD6O1UBJ&p(MIgF}>Z=LRcpeBb^B`^OBJn;o#{y*tfbCwXJCi@QqFX~9%ta#a& z+&X+h?OD|*6)kxKlNqv>@#$x|oC-&KUq3*RVI0TZdID=2b36?ilE zpxY9`fc?V%=eY_yW4XDc_AFde@JjQ)_BP{H&g1L0pE$q*vhI-lH$Vh^^Z8xQv+aw8 zgX^l0^itr2+vH|Du4tiuHqE|LA^k^NpjBPvA*ldnNlD`Kd05?)>jpYM#uE`&j)lH^ zD?-Nr&E{#nZwxtFBhN14lm^?s#lrA9KG*M#nA3c#@PNgc(``abx5sU$nhY6ie&*Nw zugPg(_vl}QZQS_uJUT>S38a?wXBR`$#0!ZJqT|q}R`4hn&v3ebpL47%(Km-%NLqBP z*qy5dW#=3UrwYSG;8L6EOyso&#_k(7LGfTbA+0O{;4GRr8nynUqWpUma~A`OxaOcm z8-%-relvEPDLJ^&=Mz?!4YTp`tp|Dy?oE|8Ln03y7J|VYQ;^A&Ky_K*e_QKMiDq*i z+XmFT0yH0+FiyRH05 zH^2kpgeLo_n*qJy@I~Jc7NS*>t}mO4Yl-rjr;CkaUQqu!S%-n zW$gtb@r@~e9$g}dMwm%+KHj|3sZni3_cUiRNBCHzKs~d2EZ+yjsIfrUe>{F4^XCaP zR3_g5DDS^oCUCp~THE;#9OkmzAJi}?4QWp?qzI1_<1@w|V>E;o6DV`F`-l*) zypwUSVxQ%|Qwb!wnq-tix~=`uT=>8$P+@?AKR$kcFYu5dl)0ez`({q`p&?{32rYep z$gD<7O7>d8po&2pc#WY<5Mwx5Q%PF8$OF|uxRBfthq>ymo=}(*fI!y4sYE2wHgh33wAOqP2MA%8s3Ze!b#Xt(j?&@{^baQ zBL4J$koZ1HE~Leg`4Od%8%leaMH zyaB|slPJIjDx~QbAcFgBq2hE#e%;-hch;BdJZwq+`b+P`U#5~GL1T|sJd}gG8&bQW zFzojzrA*Xv?ke1+F!kgjG<10m{5FFAOx`np+-2I0U9sI4#f->C>_|)0H-NJ4t*z2p zD**3jy#B}~XO8k~(Hme$Li+o^ED}iDlP8mX74ZfbO?m^w;y&m9xt6V;`$60DnGV>NEP8spSQyy#Tb!syE^nnJ@p$Gz&>j9((q z5d+`7uZ~!hs1MF_w1$c=f#`g2?Dc~NZ76a}z-V;^xAO9%P5uAdsB~2B^Zc>=`&=_* zsaFOnk*~WfC#>0(Ja*=v}^v%#cdj>>%9U$=Aix4i~+JrN0xhXF?u9L05 z)+m(kexJ&pPj-Nq?LjPTp(v;DgotXKT{YEl-KU6@hM9S5TC#)TsU@7OL4Cro3#{ep z0KDh2pVkvhJ@jdsC|g^Y4xN}@>N`i;=LsfXw&M+9QlG=JT5BLUOFLXLY|6TSny~i= zU&_tYjxP59(@>jx7r=Ct|0OMuj03NeT%E7oK8Jl9>r75P*M_O;4x5eeA#6@rK%SILX`_F zq9XBQ()qid?H@E3SQ9)lSq$S@Cl}iGCKx_=F}B01`htI7;)Y&{{8{&lQJ2r9t4a<_ zu2`PG!(TLUf_xu;2GhD-$T;sjF-4Bi5x)T(3}0()b>9GKl7DJ<9(fOcCsS^4pUE2g z#N?l`n_mINYL=rOcgp-5=jxwrY{WwR=3v4b7m({@hb8$g=_x*t3++@^S2TiEQqa*)H@&3S{;YHU{6QJaz*4 z#zSniLTuBYeKrh9Pbt@QsQ56T96Z&=q%k}VLS_^CXP7urDX%(T4~!a~sR zh9Z1@L?>lr5>j*_YyU%(42cP63!EInpbn>zocT0o7 z4LjCF;Y`8wNK9~hdIMw%lr~h69(z>Np|_9ar-_JNaGslgJ)~&%z)5)LoaR@%Kq(EQ z3YKe02o}wd$Ys=fvmTqT#L_d*(1AVuJk=RXZvkCoGEo+Cl_J{BK#4a1LQkd8>pRGz z*!BAJ7Y%J|=(nkL;q2OACtp$xX5Fmk$&hrQM1uwg4uhZKG)X)58m$i{whvTmPugBc z^e~h!#POSd{69aTmtj*K+%ur!1GoUfAe0|1c^5ydj8X1d&I2TM*n^-q|{*GyXi;FibuT7TPj7LUG6YaAxzyYR| zt1tS4XQ2AyjyCw?klfz{+7(L-J1vL#3}?8{PmlGN*Ho5qT>V zbCZjIxa`3tx=-I<{$5DeJpaoPg!8pab0TYzzA`-}H;ykotG9Dcx*g$jC;z7U_H+%{ zmNzLHd;@G+Blr74Whw+2d4tE;wgsgZkoz6T?j27U4&5WF)Uk?tKN+~uX1U$H0sd<% zww=x;sjkY7Lo>;l(wCtY-@+uZZ0VLr{@J-{y1i0s#c5vBR`* zqJWfxuTczs{wENlHz{F&03w96oGLvHaLvq&HI*?g_b491*iHa3E?epECCok<#c*J`Q z)H4S+H5wSJ{5S-OWPM>67(Yp|h_A`M9{CzpQt`UDU*ox;Su6p z!C~OjOp>n~EGLcC0$?`PBv3V>&=G2XU!)q~1>wbx+V}ME!iHCLCSHH=DAGQumxYDU zvg%Ae{$uX_8L2mb92nzN!{+ywyDl0wtY<(=>aj&t~jHX2M777pNa*!k30Tqt*1^wap34=0_WAR*nQt7F1 z;0*xXVCjljc79T+SeyYzgqY!q+~-_J=C|&=XnNxA8a`#xoThF4VybUF z{!CWXt2LvbcPuS{4@GE(zL_GHoxEaKbh{TseyUt35OBb-y5@J`*Wd#Im4w~^9q!R- zKmmwtaQE*qXmVvw|5_>eP>}O~XYCJFO#)mwg2Rmo<)ZeiGow;A1|H06j94^o1z?iN1JU)$Euf=>L&$7C>!u-@^`0ad(OpibHUUdkeIO>&xr>?_u+zhySfYYnLFSH7w)R2y_v&r#RFlD#7XLT1QLmQx06lNx~hN zADdz;Hl7K=!74rZr}X=OB)faYngJrG>MxUV{5^XQ56#ZM*stJl}#`j6x+?(Bfv=Mr<-^5 zrTD`?F3S4DCi~;I=HB?mBn`4{KdsJCl?OXhN6 zSpg9*wX44CSmPop03miS-)a251_?Tud2gRQ*ymtF!;GWaehx`8k56!Ce5f5$8`Q3uVeZ5uqvOG$(TyJO^x! z{y_l(CP`!qdV1b%{Q57o+ICzc6HyiK*Ph%05hdHX4b)%7T>{5+;d#`u=e8H^iB_sE+ikiKpe|IY& z+dD{c*tGkw@dy}+c7BzV_4;X!0J(|u^S$Rk+5@Lv94Y0gRh9VOiHQihdAF3DPip~} zlAZR!5y?;Yp!5Xz9B_v77x~f22uwW&pM#)OGp8m2$m?o0^2+T4kH$3N@mcwg=4tYEN z!_^4VO*ij8nwyfEk(W~rx82pghpw)?J&ISlZ zjrWdHg6NFhK9Ig!OUQ0toB$6;-ZZ>_pvP9*AZ*7up{5b~crIzhlv-Ne9-gK4XK)Xz zveL&?g2vQmw}@y@nmo3A%sp@TsRUn>U%8Lw+f?Fzz#EPG z*N5s}9&(b*>L2JE(0@DhV2w_O&_B@3@_hQdMmF?y#n62$N1kg2QUrX*BhaVms+O(3QmqBPdjn*C!_|A4?cqWvpwj=8Jw@#%aS>bO^>TX*)35YTSjRFy$JS0W z!m2|cK~}&se>7R{&!kH>@EPrY0p%1Si2$vrP@t4n@3>ebtjw}NV?O~Scx(siw%Y(X z6(WYbawnQCpUY+i8sli0>{mqGjDKpbWJ7}gPrhoRRA`%!r;ICqAmzIx_{mE( zhNm0}cHI7~6*CX6Tg6bR_a7bsY&Va9-`C(@Pr)39wZJi?@qVtyJ8ITX=PF-ZtOIUd zSi{CWo3e~KKV*3I_^hyhS-#aeObsA?1l-vN3+1$82ia$M61g#yeEtnlq?1IkN4*F5ZhR686i)Npf*i!Xa@t?l&fOMgd#73UkF*hvHJ%o?q1PinmJ zhO;n;xA3sn*b$ituXV(Wf2ijCoikXwufE&nq%MO2AMouugB@D<;xe85M^6+j|GSt0 zg@s~(>R9eH9iz*irdZhf4^sO(zt|05=6-`edqu<3$c=ggjQ!(((4*S^mj@)n+OpO2 zWw^O*z;a#`ug+xhpTFxu;Y)|oWIHnli(dzwkPeCLh~7s4!GZup$lt&ed6R+OH%v14 zt#80!0B-93xsgCg{p?pRLr=`%Cktrl31jYG_=};Y2bTjbhH9anun-#N6Vce%I~A4^ z|Dd~%IZdd8UiXQAa>E|Cs~m}|51gqUEl|&sH={}px}2#F=H7cPq?1`)@%%i-pu(PH zm{;;V?BxDNNTLRl;et{Bop4ayhulwEn!MS znh@p_zl{NgsYDiR4U=`T6B&d2*6aaYMvMQFfVCOuo>}96Nb4Zngo60YC}Gcf#z^d| zNyn)-`A{rnjIQEIq6UXD(~p2r=Zj9_IoBocirUC8lj!J{hZ@B{j#3{@UZQ~*y@E$T zhPp27U`8?QUuQ|t<7_@Bvi(Pi#P!e^Ghd*h2S%?r8a032KJ`m!IdDXgyj@<&H8ctq zU01Rlc*D4Vaji$b75adgmr={5h@t%>I)7~o{vEsOY*cnp9Qn!4udYJ))Fn>p&&pae zvx=Zm+G!_tS#8aRti@}<%FxV_hxuVa-xASgL6@yt3u9-=8)NV$zBRmSozbPc`>5dO zOTiQl0Ut&;YefoCEz7b8JV7HS9{~{6c8AE0E556Lyt-$i+HQ{Y2l_Y@XzglcZEceV zq<^sB@1=I*4Rfr%r>&>01+C+1>B@k@*~hc2V@2DzejWDKq)`Pz=2&cTU0QIw_dG}| zpax8ePy>PPEA+*SoL&nDS|B+f7}xrh>gq4Qv!POIsMl2Hi}7zCkskE?Z;jXT^tA{z%ePdTr^ z;_y&TokqC*Q0^Hw9?*?4|n3}N+p=&r{Ve;YZ{9i@pOp<&* zeQDUm>T1Y{&})1CTz=eE;U;SuN^P|Y^pd%MOQl#Os|){U_$^?D zGixRKZbhZ%ql^=jUh56krwN6{?hMA@zI|Jlhi_D3$M(0WpGZz+U{v3gRmQ6jeR_O< zv=V!d0BFIhe+u_6*|h%emD)d)%qTfsdeDxZ(7S&12%uNmKe+qnddVfHpC1gPr}eI< z9s#sU$eO!;ZE(fAW8aNn9NboZX~I9230G9y?Hf*n9DBH3d_6w@+*x%xP(L{Dp*4AD%>Y-#^Wn z(RrYxl6&HD->sMh@K1RLrY$E05KwclpWN)qHUO(&Ly>H35>bYNn%7&;$ ztTxCK19i6*U5FN?^v}~Z;T@^kmKpeA2!XdE=L}0|NsldV54$&2*z}fA_IT`nb{YOB z-nlr!_7TbY{>(4#-e{+e$P0}Jv0ZD}ERVn8M(z(Btldo<3srT38ws~^%1_lJTdUjs zr_-)7iyZ?H#0?mszLX^t-@73LPDbJL9{+*aGo(asfR4=pEW9Um#11!{_5nF9?3+;) z7x!22wa;fX-Fba(5|;=bSsHzRkFOy@>`H7sCvG=q#@40PGEi*0`w;g>NJw6Hg9dTX zS9|v`w7f{q-ut<+r_zW+rNHsqVv+xkck<+rQ}TajW`x$H<)Xe?Cw{7cF>#dr(}wTy z_sgC!SdqZp)T>OvFsGTPdW~oIPGf)7s2h0R=i=uslD;rAP`5TQckE<;+%K1~xBoi| z%CF+nn1okoE>qs5J_4$v=SnbcciVOmBIxmFL-*9so8sqi^g~VNxx7-{?tS?4^N$_e z9~9!E-~5|?UsSaAgPYrh{M^Z5SW(G0j9l(*i15Ztj{*tV1Z$lLLG#%BFShx5BCLBo z*u%$v3xW;y=V3DM-srl2WJ9Usw3bKypPQf+PuVWq?*BUMy?MpAx;W2q_6P`^f4JYj ziQev?T%qRl24l7NL}QVQ`X}qyEBw=49} zbk$pBb;f`tvhjkHquM4>j4pXyD1~fRr$5M=DC0ClaPvPH;oI+jVJZC8{S>6k>DatK zp8NMbM_MYwOzoe<#5JjTXVuqc?}4g3DGsqDDbOea!{nXfCts-_0p@@I(rgWIo=s|& zgbjOI1f3GkuB%u z_>(XUi^cq*esmyz{x3FAFKtO^zB`LqrKCcwMTrH*;rWv=AJvMG#uA%7sElavjAB)22_jW@&L(_ZVM?h@3A zc^^XKu+D5|2g(rq{s?ZSvt*!K@BoJ=+_oAGucZxC~3KsHFpN)b1MNGO_ zuAgpb%=?Oe&EYjG48G5$91ewonV*L)1(Y8AIbb~HyMq}%lF?L=k~Lh;GlJTAq;a$% zy(i)oKnbXZ;>o|r5-yMA5{UNym4ufb^=wbAz3PRX|PIWVtbun(;|figdTJ3GWaWGQnj9fAB)luwJqP&R5w zlye?3Lg6)|Tks>GPJe71!#Y^(gU9tbX>Ulswa=Y0a^!yaP)$@C}6=^3{40OZ4e_CY3cW4B!snatou2Rqr&pQ9VZne>p;BK+=89Pw&+ms;U=T4ms%)Z--kC`10 z&+ZnKO-kpd1nzn2vZ=diwp}^f?QwP9MLP0(@iuq+5nvUbb19TFGp^&(>hcKCD)sST zI#_bwZaK{Ye%sXSstBS)^7sHpK)An)c4&3hW`7XMe}aG2!LW=%J#0)JKBawQ13Oa| zybG_DH3AskfcgDtCz#^SYvW=;(iDpEwl2M=s_il#vi)Phzx%a3!E=m3y10)3cw`m7 zN5K4Vra)?>!~!EC^tpm&msxp4vHhX#o__nCGAycJ9gU=4)KfrfZ(N1Eo$cf5f^|wQ9|De*H9V7_C-JR zLTLk%IDZqu8uPFTm9qV(#~Gh49|4gIM&N;g70igu%yUx9*v~^E* z@SN_A=<2A-=w=tsi${R5o>uowReELz=m5!m)4>M4w@^BithqlY9KL>y{wt}p5sgsj zzV9peeIHTKW2nFJnPtn2=d~z8UhKHvRr&iJH)=rPKbL_Sm-`u)wl(iT6f;=If8`)x zEv(Kr;MN7L@OkZjt+-1kTxc9Aq%mar>6;_m3Iphg=}kvI7j2>D;rU>N`-T5oUSMX& zY`)l=kRJ(4U4XG6kRs#e8&(9I5@py!KP5m1!C;Mr`C0!E-v2hl3^uEaQoEZuht?R4 zkS)`C5)p?LtU|-)WojsG5R1(MfBs>Pp9)^e|0j&b!H9ZA&K5yu&HCQ}fpF)AD2J{{ zN2`f_MsXyI4icxgCM;8Tp-W0*uvJLU+3ziKpQPtZ`%BF{rO;;7-e-EavAOFb!0>ml zlSZet>Q5spB!j294=t3{My2*ym#wFrsE-u^j7@Asn7?YD5v+8UFKcw6f6)_i^ph$( zU}RHvgbq7fLj=XqF%V~;LqX8MqL$45{4dT`fl|5>+>8sYl$;rb^-vQKsRVz(MDb|c zMjvwMjQQ8(VuxTq0)_&k?37LlYVL1iouhqF($j1gukV#=#3eG15L0YJx77fRGHc=M_(@}r?>94iIbRdHPcMWH$Zx!8&E`?;@ zi}dK(iYx3t_Y3_ypPb3Imp&aX^n39p>+i(SNLY)`G5yc}8>uC$z#+I`7tCXS895qS`y_tCr00D!f`V;_XG{vqPhv;a+@^h z;6n07SDJL{fjVn;$pqQoy0+GRsoWbECIa#Ci#*XK0J9t{W!XxLq>m#xtq_(eoO_oB zz<^xZW0BA*Wesute}UtW$=hsX{fnmPKa+L2&!xe79o@8-c-4cPhMAujyFZZI-4qxd z1g;$$8LxuISKeQz&ut&0K1iEt3@U>cXSk2;oMm*|31^^RbEs}o^;5@HnqY%@GjM_X zM%|;GPV0&5^QDF2HQ#?zZd{liPl!hu7@*PFegZaIVbm?YVn(=rKP3Sa#-}WV)UfmX{A-_ z-je$Vf_}fC{Rs{w;m^m!lC&vfRH$K}`gNRgt+l#EWQa)HkV{EBEnOpikx${;)m zWsNRA2us57Va(H~MBX7oxskL&K@8vA)b|`&N$?MWf8!Q{Pzik$Yi$(EvM`5k$Ywh{b!&T;$d=_6o2Jv``_x9FjB^jEaP(EQ9H z{cmLCBcNocI_Ot)a*0@uk@)2=y(+~-6uDlA_<=1LO?2!8olHidq&xl#B3QW61la0l_!hp2yi zCsR6@+nGtk;kRqUT^--C!y^DySvgq#X~IeG@ns7rXqbADW|)~aQcrq_uMZ#e|5eWH ze`$?Iv;0(AW4nD|c&{XmE0T9VWGjx-lc}`3w^*XzqgNI5dvd;7{wCt)Hacm(dS17& z%Sw8(CeORe4R%mxQCA|a_?~$~(JfiG(Yo3Qp_6rJ>SJhVXdocX$H$vxTg9U1OfsX+ zUCkeFF$crn3zzD)^I|6<~nu`~57?7bUPWsAOn;SINP zjS3c8oli(CGsg>$sz%BG$z9gC&Hv1FH~!9BHY;bQNn=Pa%P``3TZDoL%rbR+KC+7~ zNb3>c$@vI)rgQ&aWE4{Fw&vC`y4Uq;V0SofSm^IKino)l^XDNS!l+F?`I36=e=mEe z%IR&~-lY`Iu^$^`+vFCk{eIRVhJnr1x0-?aD~R2?^j2>)qUJNhh1MunE%-{qz&}?( zeWi*UZYi5#nIbtw-S$j7kO^sZ3z5xW8J8ME3t1FFGW{G(u(JL(|8VFpNIAG>x4`0I zR}4^@ft&K))Ty<28|zyFuj&@Ze>YXPYc*D3q6irkq?HK?J3?+|d}K&REmrWDV|;_l z(LK5=LLF%~d9@<2n)X`ZeWp=BLuiTOKScanji;wDpR5;^$J3$xUS6y>-Cv+bui;>^ zhud*KM0T>tlt(@~E~EOz-@7r}PV4ZRf`4lA;}JmWwzP>o!1wp5lDJ^=e|)A6Nn;H; z$^uC{Nnt|z2V8CQckPSaM(tL?jVF0aUI~PlQ4Z(2(7~nzBdPLd2<%CD-znx9u6M|v zmToviwX?NlC4|lYAmRQJJYX!)(Vw5f>zb0;=k%8lUxv-ExRLYyI=eo8yg>k4>W(eP zPGcjHA~@=U$gorwffMppe{mI(;I{5k=qN|lmOYl~C+iVvX^+@b%*r{(FGqAQuKBjK zMR5P)*Q!rb&TUo;7B3;GxC-25Ax{mmb_lDQzmPm9NR0l)r$O?);gZI@fAx}?+a1SF zZ1>q7%b>_-t(z2C+uEq|QfaYf9fonHN>gvMSA}e&WOc=B?%e1Pf8XCjSEno=GH+8W z+-)XUuex$(?Hufj68%ciG7Z63h}2X|5-!|1;Zoslb}d`ehB)I~mV|M+zh4IF>d}7G zC^8Ab-B_zC2GG8V!I6M8_TCf9lf`y_;pag9FfG1Mdr^mC>5lR|krNe`UU%VMgKiCHFIAT!HK6LF?tP`~)xhG}SZYZ9-$+z!$-?f|xdG zvtu=eFts`Ro|TAFg`G~^u}W5*fg3WQ2))oT-}nZ|Sd`=~RIAQrIxIUs>rYNzZ;PeZ zKaqHmbuJ`iSQfvKv~=w8b7Fw+cV*=qs^m`h>b%lBufFcpf2)S9ejS~#g4Um}X`mR7 zeHDokkka$-Ih`IpgLQ5QD|b`2#Ll2Ee@-9xG=Vye~~;6O%5Xr%hkwT=aVZ+NrAP84=)q@OhTXZd&QrBYD~iSJ&@A)?yznH zn574=J6;I9A94BeXLW;Ly?X@J#5^Y$3zuLbuPP-6L}B~v+ZL$`$IGi)znitIjcw>U zkW8VsK(lgoede6*^Rg!U;vDDjK}vRN@wNqo43D7@e{rWxuj@(KwP1`HNUS$_NV>^f z4<-+?YG`2sF(|*t;xB9!#)HzxUp8^ipqEsTTmBthj5%KC#(&497Jw)~D> zB9SMsQnHQE_Kg^5+V;Io08wTGe*hI2;{N0Tx9kmpcY3oG8(~@*|aWz zp>_N!zi{W-LI3s=i)Bb_-T1?|0EPri5abwZTxYqoCec~CJ7Co2+E_#EzU@;QOQL4s6FZy%`z-7d0q&DnYrx& zrDANm)vH_657;P~rskO7mDTwcuLZu5Wdh4Mxubu4eZf`CSwP!6#%sB;i}>>OYeU$W z!r<^gK{|vscoiw}$uU*!2N{tr2tn_H!EL059#Qlq+W|R))lU{gB&lK7Q2(&xXn&d7 zf3r9oY05&CL+QikbvwnI>W_f$YgxYDXAw{)PJf&hNMKOjnxA<57LIQK^4MwBKixXu zr$fL>g-tG&YPwe3?;t)xwioe!X2>Var5jT5xNvzD4DrhD^2m^~d7oCmIP%?t)7c&) z$2`RNIpa!sc3Xh8cP*$_+u!RVQ#|YBf3%o2G<$_7lK(i+?$7`<)xl;OshL_E&6`MB zXd+J`%!qW$aG$KCfuB8p7Rt}q7I#*d1@989?fDw1&Zmnavhif$6_U*K@V}#gFl@3Q zaD9;Pl+txjo2=6*2s8lwIQqORJ8`A>a!i_@Ne|Fwn z#rpIqofnPn2T6VKn5TYs((|Uzqy-0f5=7Rmd%3!23_8>}!?EN`w z*FY{%eYQiT;tl8nSuJD6&vm>>1Kr%d|AJqgz(}tbqo5R&QXh4G?b8~egsX%$H=$@o zLn0%PugW2ox1_A+HvTiC4xwS6e@1A(hRZ&b7qsXRV=XTU?xS=&Zo}Gn5d+s>{_ZRP z@m70?gD>{yyVDKNu@|6=)VElFUn}>lS;IwR8uuo&qmolO<+)H*RW%7&{s~{+5bD#j zHw53<7;oT;152pN>a<%{*6y$Syqoy6r}7|jd07ow#bIOe^uuFUNCKR zSY?W;8dSH6&#@c8nKaMqjCtkxVyTY?pAaa^Ia1Kg z%f_%;#t@g8GiCp`>T0K_OHWyt^T17b)-3GA2x0p%`taZMWctH_eoBtc2&;nt&~-QQ zOBOPM6ZBDJaY39K3{IYsN=`J$i#L!3^(I5ZMh4W+QQm=~>Q{-1JZ{vkjmehJ{rP)7 z>#%8cyr&0Wtf@brf6R*~M!F$%Qmn0IZH7UYDd2A06!K>ZJMjcCrkL>=5mB#imfcYK z*IgP?jvJK#92;d`!{a4Cx==iFgi7L-KwcJutgxGA_JWZ8=DBb?xerg!1qY8HOLTOj z7{_);<64AOT!ThH0Vwa%Ecrj9duY5X2e@oczm%_cRz)J;e@BU?f;qWqP#UnfM#h$L zkR=yC4Egvj($SL3`~#rDaM`rF)12AhGOLLwM}_#MTv3g*xTF9BfMi_kA_6?o?I6+MeR^_ z;295$Huk3(e_QLlBi5%X-c@1p1-SS~!$!|q#X;2MH?E-*YsFdVrAtyYkimq0Z5^C89aUAVK z(^jO1{99qN0+DTxfMhio)A-lT>=QwzC(T^GRP!VQf7dO4W37=LN8EYjooD{o>@weH z((w~)`GZkUcMXRFwRg`WaJ~!{JvT_}w`;Rz3q7RGGV4MMf50XJ{M{6%z%pn3mWjf? zn_@k2J;5?q?8WwNjYlK`_Tv>(b73H%C3p{W|Cx@ZcnK z`{ejI?qlXPH88+m?Pnr=Z*Ard{b^)d0Uw-*=&GNp<}i?&ce8OeqpC8F zf3kannv^Xii1$FVl-BX~XYFFANt{<)7t$cUvF3Bq7!JX;QI)GZFf^-{K~D|MC;F6M z5i5$FWSgS248x~ULsd&fpnUC+r|G3WmK_3j5SB?^paud%CvG^`VY~)St&(5tr`SEYPGNrmf2Gn? zqTjCGSp0299s=$EE`lVwWt~ZTWs&Vy?|nk`U5SKqdm)ad_s}o^Eh01n={h16e*y}n z9P+8t*TTEaaL|DL1mjluwoer~g4>a5^8?6X!Z@4|dHQsziJfN>>UgAN%YNVXZvE_TIMa{^}malNH=XsNe zBawa`9h;7QNPI7elg0X(# z5~E}xv;Rp@kZNzc&VS-e)%5rP{#GCRLf~BEE|~tK(^>*PJ{9G1Mf9kQbItB3!SqY# zFQ&qiqJ|0ac%5i8UWm-xdy1V^aU~ROA?jnK1#9@5`7N^Qn`P~@e+j_5?t8fmGPBA_ zkbO8yG)ekM^F-A5@>o;KYo`P+cY;H~umXw*Gtx-OYhrS2Y_+V^ zX?@vH$25_IzUf(%e_NNi_@yA}Z8(9Gyy*aW$9}-9NC4?vo`(%{C)QK)o zxKTX$mG9>2CDg?QGG#``zo}sq7xtVUY~7KJ+g@ujf^?BsqarjC_Y>3ODSfS}Fai?k z7|M>W9iVEee~)v)`wnF-Lw&OM+2yvTFMX}EO$m1~-=$3if{d8BttFX7f5iSrO}5i< zQu|B5fb*OjkzgtFbit=U?2{`ZB~FP>!-nvVr* z5GD{m0svCU)~H~N=_W3EhPB50^#;OBp8dKW?LGRJfBum(v0Qj0^Q2omI{l1%paxTa z{4$Mr(Rav1C+od0s&Mk(6gu=fsaNLgZe*%-1_BAsh}({Lt~|NxZ2!jC0rRYqtIHLi zg(ZugGu`Bmimg8azQRK6D`QQ_i|)s5=!9Yy_u~(Iui&9^?Iiz0mx{52H6hcYaTm3aZ)EEm_ z4m4(daA%Wn+UgLXJg0P-u5uCiqoun21WH*+B;X&vsL2ttIKy^g5Fx#eoxz`?BH85f zxNPrU#1p3mWIO^o>D*^LjcQu{%ZcWPG?erTV-JZRDdbVHv0N|3loUKf7y ze=PQ7Q96-k-qw*ZRV|;qXVlfJ&7x_164Xr_eDkg$j;mVAuz>3mUCM*qu`M@K$GCc9 zuxGy(u}YMS0AGB(xWG4}cqUoYe$DsZlAW96*gEAS?Z`9*wN$?^kr{ET{*L zajp2Tf5TAn+P0)Yl(u)ORjci^o5dl_e-N|kw<2lHfxJHa*+-55&Z4>koGo*~%3~qT zZkC^!p&<2se5XQiRaurkY;v+ zh(}6#3VI#^A4DtYu~L$X*?%U5g__an(i6bsOGEtn3B+f}8tE6LPqVY|Cv0Pwe{xXW z{{A{>0VDjUYUCcD<|1@JOzrjY#i#lF$l6@V&wG&naNPQ~fr~W>D@teBbibLBarp&F zn6)re2#Viuy0sL@Hcmz-;+>!!g%uDeh=!PM@jK(wJ=a&U?;k0Z(k9k*+RSC=hFM^J zTB#zNw1}(ytMg*{xU8S7nFEjwe;U&<*H{vFqlgJ4CHu}jVwxTH0nm)wm@04m{G>&@ z)exf@md+0ZmK)=RP5M{Vh6t<6B&@wR66&2wflAo=p@mG?Y6q+QEnPPEhyhs;A*2lF zMlLw=cXe5a$P1TelO*hw&ES05#O3f9La|eSN~UK_cM93!*j8GnDzQqRe;5HZB!uJR zV?m|Xp~(U3>2E8TNSN_O5FheQDGHU3&G35|!0cU4k}#F9XFZAFFZ(qV92EnLkQ5PW zyaBTZ3q!&KjY2GoQKgOwV{w-f$YQF$U)isZxbZ*4Uq-np(bB>yM}(wsAd-t0&-%=w zDOP!82U_1+c$wv26t*jTf5a||t?41aJ!PiI>eO)2gZjiuL^D_s^6Fm290&=vq|I#O zpUOQr=w;AJ`dMO99|1jDP2Vc26vxr@d;tcPd$kVu$`0s2o)(to@pa~g-P?$W_oxVEJ24|C@)Y3AtC&Jy{!s6RO^m=mtiBq*Ue{urA-1*SMh*9n|rQIgz97Q%KTr z$_D8jyijg8x}^LTRuY23@eF>oTzYyb`0vqoXFB=qDt98^kRq4Ru+S&EBk6klif-{& zg|i~SFM*=ItQxB*j=Ad`>lz_n5amojotC<1`w)0-pY&5Ke?R&Yo$mHCrr}V>)@Vvw zRf!)6i-uHnn^vtCss5XY?=s2o_F2upkANTa9NQX?s8$Z;MFiJKijsEXfAy^5 zkJ2Y)wzW@Re}EFGwgjXoPjDe~!*Y$P=piz}K#LgCkDf%6@K^ex+I6|n&^L~=Iv**LIOQ(l$jm5xQUK=2q|9nN?NAvo8SuM@FgMSRpbqt!C~3q^&1(RABFpU2(_JK zq(9>sL%)>b$-oVC87xSEw;$`nT;+JT{r8F7bM}(se{xPW2^ZXvqW(U&X!lWC~CjuTYcEx2J5Ad5u z06dgXj*v9X^=}~yTzJ`>`n9U-^6m$h1yc+^AitCeLe{KB8j zf38VL+B>uP(M;e=S*={d?2J8LS(WNf{S8tTk6__Ls`Y~~xT=HWV2E!)+*gN*e$@Tf z7%Tnfrxs@vTyf@%a>TcZ9Wk6rK%`y>a6T|sBrNe9DeU^H_HMuDz~HQ>8}v6?l&A~K zCL#d~pQHP!!xj(73WYW0ag1i<8+^YPe=f}5mJT*bwAaLT_#lBzjlp}#o&H(a%*1+p z{khI|_qwnU2@m<-_(lEo(Me(iu$7WnEKmME!GrUhP;+fnEb4EEtng2k! zWQfD67XFI`HMG>~G^A-yaBtYkGJqsf}g9>3((?6?InYpA0WO79M!BD&D z4=&4Vh2?K#qJbGYVTnCD10>Aqe~2)yhS=W55hgk@X$JS6pHuN9TQLq%BC0yuF}+3-_2YTXwCKIN!3a16$U|hQe>)(^wF>xsdg#nL z#BzGj0q5fc+li5w3k{hoAv+Pb-}C}`q?CE(2j20)Icd6zR@GP>oe3xV9ZjDqTz?_x z(WP@ zM}rKi%uW21-!ik)f5jr@3~WZ2IWZ^pBPJm#9JO4HcbBpRwLZY!3{{1MeCcErzAiMq zRLJ@qG%;gh^{X8%$tT^E=-BspDA(s_zDNV$s}o*SRp6aoFt>bYikPRw>}9x+|b`OOgQaExJ;_y}c8`|Iv~hzmBLW~R_(`?PO;;H%Ko+CPJiQf4<`5pPQ?A5rg{B3jU$ zS$?Jj;)icTe?nXnTorMk7`3yEudc?c^^_h(7ySGR%%rpR2+$AUYS3E)2!8wlKlKqN zF^l6DKM|3nPq$HDoRRi-ObSmOD*)}Ms(Uj(>1>Z$QG6-W;!3xTa!+?8o^#mNq8>>A zMpHBkB>ZFC*Ql$0*g)#Lwx_Vc56|NjN-kNaigU$20MX^GT>bq*K5%p~VbDRbi0a@G=ay zaka$meRx0yR&C|Gk9kta^QQ~piLB|P2^JIOlmc1|dF`yGNJDrRX&yJ=C6PPBi%Q$7A21MIwhwqM`6rtQo@uokihQw&0#5_G+=;=}Q+y z+BN0rpaZHu46fzW0FI#bF<4WX`!UTvI^jC~e=xy#>I7lp;NyFpDB2oG@_mq9Dz-zK zkB4SM39R_OOOn-*#NxvhpUsFNHRqwV50+DphlxB_o%;bz??o=Qum+u2NO(GyeLNds zGrkc+sgMt6>jh|CQ*`lCnryv(hU@q*jzG?(ntp>k@z5uB&wA)|&!4H(5>t`Xz=KZ7%W)E$Uuc1od1(`{pCS@atC`J;N6+ zy57##YRGvhR3J_W>j#J+eDrc;kONEJM^j+t5*y^L!_eN^rzWo)1l2TQamk=c+u3Rk>hrXoMFj2 zL+*Xu>jAbRpe?pv0GFY2sm9^!#Joh|=hFlcNfy_fS5C#uNO{Lg!LD}5fBSLo0?dTt zO8P_DCS6X;5akTZ#o^w8BaKzV{N)yzyg#B%_8iN&^vh+@(H7Ek+x?0S_>!DbV4b4cYn?YBUF1 z3~g4O`P_4IX|!)RUORd}Z?joeS2y@NS!R{{U%WmxeMz3_ZRnxFYlN96ch@~CQZ*|@ z3^v*jK=~wdmym47x&p$GrTa?>MJuqX^Y23kHP*>FCb0pkk zQt@-#{Q?75xHyv3{DAdYwwK>XC5lCs2>k~-sFs=?P$z0Bf8qEn5K56svR8LDpZ8zd zi~>@MIpuIRkiV9Zye}m!?pnw{9AvEuGKc)zC=}g=yZym51m^!xiyJzNtntTlegI=r=o!m@E|0$be ze1j349S;%;hQWI8CiDKSOg@an76-Ykt``4LPl4E)1EtWAs9^!hTeTNjU1z-F`0Z^= zou1!$@>`#|rj_JxW3< zq9hPax3~FvWubrMp?LxK+U#|@PKCJ=<>J~4geFW7S6#YD=R(mjgG008lkJA+i#;%< zaX@C05^bQbNWhk2dGo$Cf#KJ#(N2QirVx~9hkDnP7ObL23tE0QT>G@t{Aht$$cI;5 ze+$}PYr7*)La%dZYw%Ys3~sqbHoz1sj7xP$w+@bt)aD9N3+RgRuU$-4^AH^lqs8;9 zFO?*X_lL5Yh=U1xm~~4NsI5|#Q6|F9nww|Zy+HcE5vLipgk{JNisM?t)S|&4v{LGS zawA7FEmLIWXmTX47Y@>~<2CDeU1*PUe?QXpw{5)b;;+;h5lKG5grV0W3!$lee6_3` z=~RPXL3KaK;Y@g&Sti;s>2=VfRpnJ`Y|1$w++Ls;3Dv{m>b5RL#FNN(u(9Cz!?HNS z9HTai^;}lU7KHE7Q#)9b$*O<5Nu2EVG?&5jBfx+qN1Zvfm|R@-5%40D&#C*ne@hRF zODIyC=j?P^=qQ8`|PR{bOmvMa`OxCc!7AEQYwxU|HFW^LB z(gzkW10t!WNUAI{UQI@xg5?O1$%czsuIm9V0M7{e9jo7h$~CFo&+6i{o*W1m{PPf{ zqZ6sJQCVJFY{)Y+?wi3$)8w!EeSc9a_R)O6PFy!ux9GTkQ7W}Dg9!x^&P3SWDvl03FM2%|G7b!&08UasMdI+;P@ zCI_I-kh=qLb)-fvhRTto4Tk=VB2Xi991FNpBM%!`hR;Y@cLfesn+1jp} zCs&EYVLzKmw9}Ou3^YGPV~?Y0O|$-v%MX@~ZlDRKK0|*-gK*e%e;=@h|1@kAm(#vV zF_3Q54X};laxZ{OK>LlTYPyYt!@p8~drogg-}>5n3YB zkbKOzOubN3x@JqDe>TNV6Wa}HJueF1ri?%+R8{TfqU-{WM(C1L_4I3Mtj{#A3zO^g41_XC0veA?a|5X5+@yL)Te;brcfe#hKf!12Qnwr~S zc0LGg);#6Wo&kew*xh7Uk$B;qW=WuKlZe8{k0v$FqUMb(;9V`co{TID9h0>sK4-yU zBGZ?Z7D_Ph&?Fyw+c0%*IJeWqYlP5ks)n7Ck%NwZ%Q@X|`7|G1mSQ`3?RC6V15i%# zoH%u#iAnz#f4a@Ymdw0}ZkiC*y6mr%j8@DO7Trz})|7tj#b3965H!K04E#-K%Z!T- z^`G{BsGyaJ22ytOh^b3v|GpXTXoLW(Eje3U?Xh!xJugzelpj39Zwrna{9Ztu^9YFB zyOi_HJ=ILv-GX1}Q}{f5_7`<%xOhh#M>h(L_{ihyfB*iNOKaLlO0s`s2O=G3E^O;Q zCr)Gmw(+s?x6#P&d|%B9*Co2j3+kB_kx8j<4rSMWfkts-j`F6#A)m#{=&fXVn%Qyn z!c08StnSivVHY10SZ8aHaJC%f}+u5)?kl5MRqgJ*&uT4K@r4{dU zxq#7oM|{OaxiTcl$U`T2f8PWf_>>vuu5fM ze^dhEZ)cbATloa3a?sQ+;_>R8r6cAyr8fpBoc%PLgwg1<_H4udV)6LW9hqJF9~|U| zy}8dt>Ov;CFKK&oi(M{7r1AG#&9C%A`*p5!p_Pc<+=zIT#fC_=(8TdW)pg2lI*{cT z%nWMl^G`r6GZw!OF6p`wAqJ3k`aozMf0;RFm96GNiM<-En^=HrkK$+20tN!My41T+ zcISM%XhSxz>sS*BwcXD}$_BR!zjBf773T4$7s9>4sU1+f(7FoZtiHlBRC7V)fF_Jc*5`qK6eVEiZJ3*8T6RGU|ze@!DA zA!~FdD#Wv33HHN0(9A%$bi8}0M}zJTLuJD&>J{jXeQB*-C{P}V-=N7xL22SP=PMfT z0>NCRbbM3Pou|^CE>G97bGlB;?{#fp{}N-{0y`_i}`8_m@r8kIC#_!w07em!nUr z;xQ2Mw5yoN(Kg5V#+lwMBd0tatP{!-zWNoewenKRE9LUV({zN!f|z>Qe}a%luhzX$Uux1#GF0WqMww4u7lZ@9b=0io549WFQH1-OeFZDg7*!Gx3P zt9Q?)h*z2!Nc`lKNI8Fye`JkNr0r00@X3hJOiS`%&al?6j$x}Eet4O%;f2eFui!hePuS?b0 z!CvvTr0X`x!3QGdIqx*6k^-k+R%6{3^0Qvb8-ZgjpFUC1O>J9b*=28i$;xnC`gYhF zXO4mX?bwRXQxvrl$Ria^Snc!*%mlNvflA9?p0X><)!ZwlfUO8yGs&io^ z?9!(e~(?jr&*2SuWi3L;|_tJdqObubV0&B+{KP)|I-|4XH%~cq1xoe zkYrE1e__Fr5B(xTkAN(ANHhd>Ys(m;64?NZuYo zhmODG8(t2fI-x}hNF*N17b8306+Qx}>#kEQ(R7oA0G79u!P5$(Prjk3g8 zV93L4%d+I^5#Mlol&CNx-!wk3;F{u}gM}3&eeQQ($75w5)dgo5c(~3=(?Qxvr|H2& z%{X%}H5*wgr!7n_5wi`N=IxsuLwSCCyGk(`LJKZ0?6ECJqP}C#RJSb9JNG@9K`Q~L zp4UDySJ`H0e*;8jG)z2l2zZhzhcG-A3As-0E7sFlYYB7xv`H_Gx~(}T{!cRYZZd|v z?=Mfp50mR``=pnxm=#OPS2jMP@0&^40#ccs{q9EkZ?*01dlID0aDB+ko{PuR%CGHF z;FQ!^t97CQ(j`cJ-9oINiTu8w1|1r=kxpH`Sx(1qe;c71ht(naUsx~%IDQLE$eQAF z7C!AX_9whZYOHPQDWU5u>~jHzdu1uc!cH>dZ381SCa?I`6Og762B85JIhKT6%`|IBo4|=d zt5;Dczl3?^5=&>=C%B?kG=WNR*{UTxgg8 z_erp+qmu{)r#%`g6pDAm>tTiv9iOhaO}3aJMS2YGL{sG=W=L*THqNEwN6(alc$FLY z_g(jmbRQ1Q!%E(i??T4%b5*=VF$vwm=f6VhyjLZK(FV=WWph%)9CP_->mqerXVHS3 zeAf96vVTPuik=nMz;>Qhjnn z^JHKF9BUw^^EU1fxr=qiA80??8uiU9`YW6tOQw126xp#Z7Pp*)4 zt3lB5_x`j(ExF*Hk$>g+MB)er5|nifuBn?^3YD5NL1(4BMNu|Q*-l<8TMG+4pO9N1(_S@8K?MBG___!5202Df9)Dhl>QoX+sN)AxcIt zl7~K69;^B+re2xEAluV7eAg-G=gh~)*hVo)jPn#^13Ll-wL!&u z@wE5?JsMwKZR+KH>KVL9#O!!VfBPnOmGp5yj8RYKyn}}sOCR9<&U+MmC9p4)31vCM zZKHQ$y`kAf+R#RWT$ltL`NrM?hgjn_b;pKCV?#LPPKAkn5BxcIou1|fWjC41lyeAO zk;}otJ7mGT-L(>HlBps6a**KQ2yo5X!?qJEWhT;l)SV|rUaq+8$d$Bs=6Q{ozj@^a)~ zB+qPl+ihyI)5aTSxOg<}f53cq5bbs0;`Ir#dN5$ZMQ&(s9w|)G$glIPsP-Ol)XObH zO~HqaADeOJc}Xj2ktIDzX$Pfx1c0SN+2Ox*wOSzO8sa?9wc{ivfWRCi5&TST74fW_ z_*m#tL{b_}|L@ZOwcp8qasnk%1#|OLXJ|rbYFo?b_K}~bg~pK*e{-A|NTq2jJ^CuQ zP+OzxFXb*2pH{Sd8ZZwc+z8gjqidmMr54K1`OAgD3NN8gKc!j7R?yt~e z1$drJ`jfs5p?)oCSha3esO&TyO+g1LJb&VTJDfj~eii#-P0;w~wi@J+&(`;xLT*Fs zDo3hBxcw;|^EM?me^y_)*y~6Ny_2z%KPeWTk+YxYy~|P3y*1#*c;*$yLzfB8M!|9G zDXulWO|c<=CWx;h=Nu)v0Yf%0Jt{0_W$55y50SpaHHtO+c;EBw&GMb*4vAm--4~*b zc8XhkjXS-!TtZL(%znP{XNFztnjW1$U9vhBCJCi8b=%BRf92Qu?^>JZxNAt28{T>U z{py^?_^O;i+ktmqd-ssRMk9T+wwliI!B=04VTwpv>BGdzBLFV^Qvvg0i}e6OK)%1D z(fSh-gI^Wbsg}P3!%{FJg=V&{c%e-i&cqnMAVLXO!1sTEG-=BOt*VmD)4PZ>Bax9Q z`tz*k12k|VvaK)Etbb<-`s_0G?T7yI=f1m)PD&n*dYqx#AEZgH5|n-eY@;DjPbyPt z7xBht=z@4k770dKVzJk7z%A-^=(=w)j`7JVid+Rp@wT}p$k6PxIjg@je&R>KRD^c+ zf}PlBJv~SWAG`vhM>QeVWHV1yO4DlEN(E_A4pF~X>y3LW4u3Sc&cawL2bx&J$XX3n zq;|plAm9rx*%QB@FbuRJOm`_gAss>W2((b2n1W# z=z*arh{39lo`05hfis7sGjpB-W5Q*ws{t7QH|1AFgc}yAC?PH4?VA+a&|}fg94XH3 zMEfYc<8B>A2D z_kWQbICjpa#x<+TIWzL63bpdS3_CS_hRJyRci6HA+ke;n2g(Lm!1%IWK}Jtn8!4FC}X`uZ%ubHk*b;-z546rAPcHBd9)-n~Ti)9CsYc zMx_xL;aM-dLTaZ(VPpcfqp!8i=J@=aY${Sb^*TP{I{sq18r(nUG|-*ue37)rI8!VsgFS?84$iq~n@i z&GLNmD?ORQ2lfaGk*C$t;#0qEJ~ce8L;4TTs_b*vvSF6YVqbf@scyi;|GP~{6qPLw zL4Q6CgO`&D0sBA+E`e;q(SE+niuIw5%GN{R?aO54Zx-T{RCV#2+!e1G92+4M9*u>VaQ@Jr9uoZ4=|H#Ho!toO`kwaOR%SQm`v9M6erBEM? z;w==P;C@mRCL6zrCi_EI7YJ(y;}))BM1L4_SF6rN7`V@`Qv)6WKu@9Zom@NKN~ra2 zN>At%ZE9$0!1_3)zX*M5W={EaO1qpSg?dOOR-3nsD31{%LY#zQN7;)!4D1*&j1Ia4 zvZcB`)B4YtCt2SexfwBP`SPo0vvVv9+0IO9I_kcH$lT|u85yqn(VU&Vc~i$m!+&ay zGa}C()}B_@_)s39(d0I`SHI6T(U~yS&8RC2BRM})a1-`TwbW{sP^X3pK6wM z34GNUA^x0QQoGY{8mPGQji&y!@_(>ahqusEF4dA+8!Q`e;+}DNviNLjL@_20?fleR=UN!W{_PK>b}fUm8ok}m5@p_=-d-y#o_iGU z5UozVMe4efDK>XnHPh>lvJhMqfSbcc=gPNf!Ow-cc4js7`X9jZcdx&Eet$03t{DN| z*aiK`%^;-6E@PQeIaDG#S7m$9i{mdJqKXtkqv+1%$uN>YHm9p_L43(GC$szJPVN*b zwUPIvUR&n0L|jMG7DZ+!i+?TDTxdle){#Iwq^UozPj&FF=6oCbH;0_t1O2bt&kp=# zkLuoF--0}1^Bqj)#DCc!{8kZUueF;MEleH2FQAQ7>C|q4y={h_1L68FqTw{sbGu=W z0R6R)hWt(xYyazhwM)2dG^jRJLi9bYY--xW-UoH-aTdY$maw3xZ+}+Rd?n{ZKCQ-r5tJV0OP5KAl%a{hjz7n_yIkAPKb8B9i`OwYm_a%72-{ggUsFV z2=0=*BObG+MOguMfPZ_;A;$?8m>n()ZQ`f;=xV3Z4SPm(+%7(QA)Dc`40o}Lp-bvX zR&%pWsryuH{%6-B4f*L%?y?2A8yPIo5F%rQw6(B3C=Wr7@X9vYA4Z$vD zL<8oF<=q%CdE*Nu`NH-|WBor*}%UB;vqky6PuE;~Ljj?syIBh(Z zH1qXvp!c_KQq56?7fDDX#%3)T0Nk-o@0|z$F8_do;BjBK>8dQ>I=$ znqR}RrlTvnt4YsU&;c_=GeP3kh=u^|KXpFIVJ{Le@_+ukb!zG1UW^&i%r36`Au^lO zC(B2ZRes`3JUB)lmHf%B6N}y;sY5gC;XWKif0hit6QJ;4xVX!XtIt#<7p$TJ3tDic zYZ>MhIpXs{vTUDNO?2;|Z-rY#CuQB_pCAot8An1;ZVs|t%)kM-&<5BoKk;x3!eXUA z;cFgi?SHneFD<$XuUx|Uh~mM_>%WTV;&)QBfZLY;kc}TJ)FQP*`~uh9rCjG^e2=PG1e-u!7zTa*xwX&cq_?4I`Gw&!*>Mz!|EF3W0ZJypt`@wV7|y_rTv54hFoMp zOn<%Ct7sr|J%-t!5V_ao{KvYQ+ya_fHIm3>$_AZi>t$C?k;YPf$wLm6)hmC-%iWZI zm2Dx8G+skX_=Dr|9dRVFf6gwuayQLSRFg6c!Tw3Zcqo^7SNVbPJI!I!WAjNLhQFwr z0z9`soyiwYrQ7c1<{pPKqotae-r9~O^ndv1X8RIq4sX#f$x-WZtXK9M1#z}J*h_w! zf=q!&!s+*VBq72bX#W?3p(*W`EFJquvhyIY?*T0la~Dzu#RavsLb5j^={^e9O{fxz zBi-y*xKfBW~oGk6{{7zR!Ga?+Hxm9YWeoplxCR36Q4SK<7U=-K2{VHQ(BY!Fc z@7SKF_`UcT2}Vi01Wq%;+jr>GrW2%#gO*5zEjmTz!!G^#Tcu(Bj?zOq$2KmmM{EXl z6PMzjLu9VNHzia>kAPPXkOJ5JztewmTpYG)blYi}WqNX%v?Zeruybjznx8Ynczh}JgHD7*k#OQ~zltdku zxv;f1EQdSgr(5P^4zT~q8#!g|V6+{#iM>8VnClp$vup=8LDr~m8pyB$qkrFk*?D)) z1$*1#jT9l-chxPJO3h=_1%L5GO`%j_L~ck+nBhE|hjWp8PO4ti!pWeOTP{O*hA8%m zDt&CKP!_vJJnyPC+<#*CJ8|TwfGJ!|8`YG$VDo+baH_J4#LbzFHU}X!!6!`(L zOsP-ZT(*O?tY-Ed4FI-ClKDprpGE&TB_w^yDeh{E6d>sMndoT6UrN?VsZs2dwUB3O zc4$%PxYy(*n`0~>lljbX^RAPID2g2qVYogIRG*^T&a7=}Xy#nzJ%4vQ7HSEp=Bwy> z>th#M!!6qa^NF8R`eT!icwNeoKGE%z!%;mOs6RGDGcs?6a*a?t`vZKtmOM`c6Y7Hf zfHBF$9e%Y!;~%#!!TW!VROiDiD(_~G4(0kZ<|wP?ZZoX?Mf7csy@>k_PN-wJuv^l? z(t@HmOz=xYna9MGMt_|p?Wj(<9VO~6MF|CWQ)AC!vSQR=WahpdYDy$Z;&b)^k#De# zS__Xu;NyV;J$Jg*WjBSc5wDs5&Y_cajrx^)2Be8E@-WzUa4+3KS@15DIkD!+KvZ>p zQnE#hq48Ik+3zLYN%h;rJ0DwNrCUX}{^Mn?DAy>rgT-8Df`4SMy7vo&qQ*iiRpCg3 zps-`}JtOm(z>T~r>E<$3X_P=MLla!sX?EP7pb^%dA7rh2{7;@+9YEq95K>tV>ygDf z(JSS)*tla}OE3L*PsjpsT?WO1w01XzqPs z>*&=juTmekVgB7};fK=^n^P@IV*rlAOvJ#RU#c7D?{mJz@Hd_wFaN}~W4-ZV=`>3K zyA25PmQgfH>L0qh__ZKJHG142nPxM06ZPe8C<_rTn196-jX2oM`C%UlX{S^E?bsp) z-eK=77cjk!a|7YfK;1}H1pHX{(=(i%{>T*_XNPxStd1E(7Js2}15o?-Lw+_GF)^et1AR0UtFK>| zL0n=2buus#@PX2ga-bS6=2;bFx+ghJX(4TRBXhi8%6AER=?0QzRr3eCJsZ(5nQjt0 zFN8gZPF(TG+$PHA5L(OYDC>;K=l;^7IQAgj3{UKYwT!`66a)vf>gEl<+le!`P+@{Z zV1JD#D~C@X0k==f;O({azpkK@h`p$q)cEmv-)j*Wa6`}B0BzA-eaM7FHBmb`!QGZSqZ%X;xc6ovb-RNU2_iFKAC`wqI5CcXe zd(wM`Kk}GXs*Q}H6M>kA6b^aJ&)J%OnMEwg$lT7k_|DbDwup8yh2?ACz2>mh)sjqN z42yBcll12<3#;Yh6Y-arvfQY}!=qDSAiPfK2uYjgZPn%fg*MVvEAV7??S2G&Ie(%) z0SD)X+Q*D;=0zu4ypf%&2wvykZFq|V3SiKfT{|If2!HM2F=+7s8D9!_ELSnB{chqh zSS^F|M$(@}1-Zk-;(M=V+OR$;X1<+lk-|7H*6JAwTCwYSDKy=sP3CBgXKmUC@;AzF zE$50qHu33%kHA%1L9_y)$IN?dFn=?%345+Jq>mF9e@mRSHts_1y6k+Oi{mZGwxM=U zl6B=5ETCTL(EIHWD614^+3V;*sug7)>!Zl^j_-)-gem+hr;O)z{bZ=F>ajydMtS9!ZYJ9EVBx(z9azJK69MV$Zx zUy;zhx=qMAhl{J^>~vXSRTNoIS-k(+AOfe`mZt_N8KuJdT`$EXMX+G6HGDip3J%tV zejmEV?SMnAMMINs3+zx_26Qg9U%b92@fHbo&-mR~B@ca^PtI2BhX&bl!-7z}PhU#N zVRf4bxb%G3K-%ec`-Mhm#eY+$d-{X38(&{12G0l6j^EhX+>c(>zPBb%o~!AcQQhzR zON2ZaK*;-uB$w2=iL>Ee#D{|&7E06<2X}?j<_dD>#Z#h3q8ISbh1)c*|E^M(fRsvf z5ii=Qwz!QlHU9$z2}+C|V(Y7F*B3KqzOM+5FRp5l&LQ7}jx#|zOMk)J`LO{EjxI86 zqOZ+5>M4G{Zi~QBn3fR_yv9~z3X)SV%ik-AnUq(_$&-oYyL2U{@y;$_{8fnaUdNXc zN20ko)XpQjuM$ZbW@^6IJy*SOtv#;eBP<3_&yntNHZA&y^+n1W!lgZRkxvwfbog_8 zk-J=Vh~mLAhxJMg_~z^=Uzm{{eSVZ4A&@ALlR9&!>azU zOFrufCC;0&Eho%VdOme6BmjP;-BJXViYk>=+?6$E2@(%M(ZdLMQ17T(j`;?i61q>o z6&a!V;gPSc&_e3hJr)DEl)dAKkbp@`gpFhH13a*6PfudvB0@#iBbm0*_Uk~~cAtm< z%EqH%+utArlz$Ob-uP?KQKS+LN$Fc3Oz!b_J5LBc#iu*5YYabou&~mIG#+)@XFjCv8kl&N8V>2C*3k|9JEG}JFgg&(0o~#;B zn9_R+-hZPdaYYsC%!#TM-p!b?>8lF8&2@tgR(I0a!|~H6qkph5W#`9pmV?y{c3UXv zC#u9ISH)SR4FJ-ZfW{~DFw_uLFGETLC;8iB%F3kb_dDEvIZA!RDvaO8jAp{%)9ss@ zq&WyT(O7RXAz#t9#55n;LZejptT$g$Kz7PGsDHzG!6--GU%ZCAC&FBx zQ<_@eljOe2s(Q^F#@(fY+MH#uu!Ng&PF&v2a(b}^#$9*QVl{4yEwrQ^V}DbUS1F$! zw>xx5B`Z?JqttZ;)Y-URAx*xBEg5VW)id8uV*lE!y_lBntCb@t<`mClPO19G%fExg zWq-B8;@@8K1$#24k$5EU8x3lbiZi|{7}Zkpsd7jRp~eAZb+j|89;Cp$cxB6Uq|-0r5?Wi&-@tf(^~3KMDC6f>d;m4JB5% z96%cb!2RS@zxmKBCtJ*zs3qvd{;|AFLVx-y>33ih>01@M{c+Car`L(_$bRCJihpAE z@;`|>_7&Zt)`|D!8st-jjF-$l?zz;_6GGNx)be}5Mzhw=j1b-DJB-l%=@x=xG^%x|-!2bocb^vr{8 zt7V}_wN5@<*&C$R3j3k3xx7JF5on`bnU#VNOi2_vxn2GG)25DLUbN`txfkEhlYlMP z)Si98WA+I3OL8jx*fPV;TK+6>Y zIXL{Zmyqo`?r1UTS#A$PGRvp*P*6(Y^B0$)Mx z<2qd(Y1+~-2K^kUYp1ksBQCebgWF^`0!a4@?DEty&F4B*5pz4v{cF_gBU{m8$>|XX zTZV$bsE5VmbeXCVmWk*4aepG2hxp9Ly8wYT{(!Wr#HJO$qtw{;hLjzrV)KOgEo&S+ zXK9}e*bj-Yv|epLPoZ{ald6oj?Lh&FmV@8)5@uxEep6mrZZTAtzk~A6Wo5}sZ0tkmPv zQHFy+IcS1fHhVQF$UHmQ68OW*!!^pS9x7Jd3T zjgB2)L_PFCF-o!fy{Cn=u$T)z2TN7z$Z=E8v(HN3?<0&@rj&ckZFQ zutpe7?-u)tHSCbHzP_D+RqU??NF+3&hpCq1vv_Asz|34|1Ap8GG>>I#e|=F~cAN0i znkl&jX?1`km9n0p@DCv~Gr{`~E66wpR}}Q--UpJhI2s;`bgAvEdTq!f&9| z*AJ0M`oJP+-#=XE>ch%omz)@wx8-`hT8e+bIMlOylZrUg^PWaUe3>B^`<3{+-0j07 zz+egsXxJJMbAPWq3AWuCn1@YaL?A)onb1LGzWFJTNLV(zxt#lrTQ66SULDvC!}g;1 zOlEQRS2yeodOA@!9T_p}Ag!N@P@!Z!l&TQP`*An?ep987{YAc>^?^ESBHLvHcw z=aP56+L?YqN9+tM70QeKt;z$Xvg7vq0&7&WS4+2lQS(KuUIl~Iy&_-C9YVdHNuTP_7HLr%Jw zCbmVDw|OR^hj#Cf z;>vD4pMP@Sw9?s(h36$b3(iIxnB{ipGcA1e6xY&}hcS5#D+kQ*Z=V>nNOK4Z_ATo$ ziJ;$&0Oa>dP)rF%ZPly`mK$PhjZLpZYZHu5vV>z7$V{U=z0RQuAPmSckvNy6y@BApMvId83@fF7W=a9YNsdt7WH&V}hR#b#T+wUYi{>T=Ic5-j zQ9feo(%SIWv5T)rnv$@!w;wK7xlOPQqN+w1!g~cK!~?!#`}<8y1(`shL5E+L2lK}$ zaDPz0pcZ$i{)tte>dN9yBfTVTZ3F9Kw6Y(O%6V{)wpJPUG#Z z%CC#KHzt>Y8yMW)r6G@xeHg(2ao0d*OL5`z&x#ACiM7WrYj&{qk$|7u2>uPYsoKD> z*EyZSPW*RQK?=?}N1HqLZu5&m*HRfDtA8-n8n#;@S|zH}k-mB`fuoQUjD{xD{sl&e zsZ;-3e52#Mc#)eX?cZ zqUd5XJ$(i}Jml)vM!X3G#g_mX^V^|S-%9-6IPG5-;giBmyMyGY45Fu>bd}2!9)C>Z zyxrMyc@cto;&#N0aX`u6|0kZ$jnCp!YIu$0(t*UzFBcxF(J1kKwcV4o4kC%(qLw@f zp;}brTyO4!i+MLA3bqQtTCltTw3&p;hdm44K1_|)s?#G!g z^nSme8LxOBwZC5xd`t^*#Q6Ufn|}&97ZfD^&74T&-B?s@HC*!+1+dZBav-L)ZtVU% zt^%@o+gA{?%15aYfY|93Pc#y8lV%x>|0{aQA5FC{P$I9=wIHXRJYJ0K!CVTv7Kf(t z=lIj?uEtZ9rlTRx7wZYU((Kdp>yXX%8^F*y>nGZcCc4}Oz|5KJOdL0;-i}iOfnLpna>ffOS=CMrLbve;ZZByv9Xh;q`*_cg}PuHyZ*P* z1~uzeDq$!g+xO+o!Pgo7A%6zr*;n~C)%?iiK92*V{v;%~!sM_ycg!Z6q(~;xS zW^RGpwtMN{zZe)tRZRaz@{XcNKZ0L()AiC4c(fOQC7i&X`YpiV<-qWi+TV#{-8K5b znZZX`%6;>P)^uSW;*~6Ut`~O2Ty*OXj^oWQW%)PyC*_9%8pqEAX@4`5t$VYA>+-jv zjV$g|EGPbsPv*CXHo^rW{v;Ih|4ibQY3A@gXoz#}i`4ywhQ6wy7yj*dfYXd*_6kpK z=8X5X(b=CD4b=3?DDAT7_p$GQYTQDxLgR>MeGMS;cPf|`5dTFg^vs&}Yn#nAngG_} zr}OFiW!jbil-Z`6G=EwUmSJ$bi^LbV*+#Hf2@<>dK_rzrM^2v2;iR>-6(B7(N9Vyj zYo87Z>!5YKL3wYeDH{s4*)0E6@F`<6cW4D=fj7EfB)=J}=(&04!u{oh$q_q+q_k>DT@k!wXyd{SCV<b^-m zI#c1lzMBpoo2#xHVoJrx>!z0ABjZE*HQ)Z&K~XyOE^9d$`EX-P3ID#zdA9E}UG9$0 zJ9Q7K`!BSXT=`J2EGaC?_ONvje=ZVELKGPE4~R zx1@gEtAKu(B%c||l;1y2Zob2Rb`lflt0kAgN__wuOP@3d%RK`31kzPOss#{1L3vA= z9+w8k4}aV{m6yr+8nyi)mu&7aHMA5>V5CTI1n1L!P0T0DyPh~;%H1g1`Vz}{*-2cC z7zjC2a?VL04J0LG8{5KS?~iY;!X;fKD-*~vah}-?*s6YC!9dIiuPc=?v{%bB{rY)4T5<+-{*Rrf{E<;c!JF3w zf#9_q_VGu+*FnZtcbqaEI;mW*7iE0-uN@^1lzPV2B}c(1tM}l)v{=E}2HRrCC8GQ! zUKeq6_hsNwQ{Sh}Y^A@&)2d7_37ovO$A4eH=pU(m(Pi7>j% zU%=U8u?02^Dax>^4tAW~O<8dIb$DA){%JDy|C6XAaf}YfG)`K(Hus1ydl7HWP=Ce=q0s{PPV}5e@Y`Mzoxj{+e&&e6*nGyBn z%BHW-$M5P+RQZ`8d5NAq$*Z3M1o{+)q{D0?XZg(8tnF~ZyD_=Vz0MPn14qTce39-r&pwd7KU z_T^sX6zmnmRb>yTSS4Q~Nf}Ze0cQrQ&nTO={bu|uL*u7Tcwt|_D;(N`Ax{IT$*SJ^ zLew;YwXd$UCAi%TbVkxCDH~Cui*8{b@M<1Z`J{5*#=K1*iy2`I!GEDtccA^2mmTn| z$p^eD08T}C&Opq94a91WC>uZurvhQ16)pdEl{#14LA2EBcHk$p*nSN0=uPVE7m9`; z%A6_3>Wqc#@@0D3QSgyH7PX19s|T$1I$a03QLg!%P>wkfR8D!P{5Yk{HE zs{zCBEdnXpJh`pyuzyUVt^NHr6WZs#o4v25b_+S(3`aCB?1`#A@k&9E)S`6&KLn6Z zRC?=tibT8f@;)#X;1VSIeaau|35&dpY-er=@@__-9zFtk@_sp~Jl$YE_KjM{2uN7_ zJOad)ieQ%~PuJ8~Xhl!~1n0~^@OpcZPJC!IEpCQ&kba1w!G9dyVB1V%q$v-}23m9m zou*2xah0)_WCA%8GXDbef0I2?&w$!@i=0eY{g7?0@RiDr3#>*k@lgVBl}O~Zj^7%& zvJcR|NT@lFotlgzYYdTTCadtg!qjpW?lV<$d>*UCxn~z3MUt!I{AXXpss@hPiSY*n z)#Wnf!dd73s(&9=e_@Go*yA01-iF_bexb`TQPX9r4=d;PU3!&yPMxfV=DWz>U|xQ6 z{-W6lDN+LKlBBogoIvIxLWU?0kr`aQnME3Nq#CK|l)qqxx10&X`$`DFx^eIORq`~u ze$H$LU~lo#8&;GR%^^PIx!>PvfBL`fM|rL_()^_?-G93NOxu~ELXy9QD;R6!axbn= zu2Sk(XQ<^VVU+&niJmJNyJn}Z)7rB};zLoKt22hDT{c?%0+61!7~n?XBq9=Sy~hPc zHLxQ5(ti)!(5uxWExPQaRu6rCjmbPk9>QxohoHuyJx$PcnHq4+T{vsz2tu12xl5cm~l5B2eI_>B>ZdEYBK)@8c;txJ^zMtm zjHb1A*WQ8$_`Xw2IUsmxpw0YWLPhrRpF6PE;w(9F82j4qv>|d>LwiRDuS3_Yj#Fo)9txxXAYHJrkK9p zQ+t`SU2U=5v0wS66uiBioP9gSTOw+j-wi%pmW3>+$?_!u`cU-s&Yl1%lg&c|;k7M7 zCT5vg<0nRCUP9KHqWZ#Nv!9X)}T?LhD#z47Hi0JbxG~@EYuy*pBDcE$pP#bzk})bRH(i{os(o>DD|jvl=pY zDc;``L^3T7a+2HVP5Q6_6 zw;}ut1EdS^?&IDh>wl(mq?d>3hPAv=xM$s4d<6XHU#$&+912Zjm~R8mw0{gSftkr+bwhU<4asi) z(UgZT(&4F3@F;lXCqDoKmzC|jFy)QqKNAAogHdB|`v>h?ak7jF+dE4lU zouKi&%*y)GsFS>-iU*tR)7Drhq<@fwf12a%JbK4+3)6rTPW?g7D08`{}0!966hSqBCH9V2|f> zjscYih6F)46L#wfvtj>uqaa^OYSAGQX!d@ltLnjZynhdb&TvhFS1V;v%jvk}c|D`L zzKu`oyweMWu?0Ig*wvD;V|@~l$!!r&s%tBXsj*z*< z0C1XP$CLneMm_HhDq^IJ1^=^uWS;e=H@yoo06u&zp+}RI=-Qv%dYK-yYg4drAf)^l z-`Fq#mcME+c8sibWnBC*;F)XkEKpfwM-uwGt3P%-7x3Eg zX7n9}ZTkoLCe6^v-}yzpA__pZKwA2WI)B8spJ~v=>;C}<9j0rx6Zoe5_GT_qfsfk>F1OUy4v{(Du=LWSZLgf&wE_n< z@ekAJl$V#9yXOy)g?&p=pki-zdV(KM!bXlyZOiM_YJ&se9fq_p<-wS=zetoMj+uI? z$6mPY#G();L5UTcnYJKDA;oqU}omoskZM9`;-c?f|7k=|MkB9=A?8^5*VAlM@uLXiW{{{H3oy z4izN7b10GXY^-hb`ws$?je z46wcrSk^%iR2 zM$4<%@3RurrpuEIHjsE*g&C2PQL}Iwqgk%fQv!FdQ#!PC9Uwf;hxKaz5QUdFKc#uP z7J$I!tgyK8-6wQrv#1Glmw%AHn>GFk$!4Md5D~l6tq>fGm+ISvK{X;)zfb|)AKf7T zgF<$Md$F-ojGIvwP|Oh2s3)5Ljl*>V2eqPP>$P$DZ!RCRXW`_c zpu~udCtmFWhnJtZ)+h<+FHI95xjFWTL__kFm;`(|fHb2x?Y8UG+8+xkpGWV8YmzCp8L~jm5Jq?nd zb<0+SgrmmZL!bIb%6|&(evI?~bmq;FnwN)5P&GoH=uBF&)3q4lR8Okv7u?X(=-X~= zJF}YqO$7}{44Host?=3u8wNR8{2ZtGJ=4gkPI}}9VROc&v>$}g0m>kbR{POae`5r#rblvH8>?A+muKU>iSuQ**Nj)9jpOra>F&n{S40S&J!> zeO_Iyd)!h&I7GTAZn2&ag5+;pKgzq39A@b~ud)&G^1EeKo(h-xF!y)!w>{>}m%f`1 zcdVzU3tXFDuYb{E#bpaETeWUj_4MF$nXO^Tr<8BP6?W`z>4Qt7Q?kBh3EsfU9N-prOk4>jBk7JNs?}=gOOg`y` zXL1k2^GSL__e2G;=F;S2g*|dbMj8`R61eyy2ELNwfl+b$=0? z@O{kvqIR?UwC~fNUX(%)Dk+kxDLgv+q=A8GRu3ZHD~7{psOO()PS-+cZZXC>ev$=L zj?u-76@Tb`QR?NW998zt_y?2O9XLPTrk)msp;hM7lSw)6LxRc&&0Gwk#&(#$Zo=hR zky3QjrJsPW?bmBZd(%V5!{jEv?BE;xbJ}-~4RGe6XV-Gf=n6TGv>R7=ss+*!cc0=Y zmpecKay~i6c4BEQozk9%r`Pg7MaY`5eCO@6`hS` zEe}`Tj*)vbNmV?Vyxcz%5yn<^16T1U4?UPM7RlfBHQ`i}R@3&?U*p>_2jxnn5PubA z!2cCGp3wfl7ddE({kKWHR7*sn^eij#H-ZKrK2~1uOHxPHpEIewraXMZVcss1>x&G% zE`MTmfQDbmxm|RX$G5{T;tu|>XlC7J{OXG{U44;%0I zNo!f^Zt?eS+vuJ$aNy4-a~iEDqxxjdL_28drc3AQEwH=z0ivq2AO?hTZ2_<3j{8S> z=v!o*dT+_-`)OnY%*lj#3P#o$LPrgTWq-h((~^FtN;HeQnjTYJI1>ey$xwegxYjt% zvb9WCHmE(Yiar1ab|W2Mo-^^qI6CR(j5VhtI?cINzm8i{S!5k(UCNE(nVh2-xon>4 z-MSB}=4>~!LjJ?u{!_1)(O8UsU7cvN$GMw5k~uGF9K@}`0r)F`ME(;Is!LCTAAd5$ z)U`u(k8D~%mccZ`5y(q!4ralX#YWP5BfrWpI-~Xmd5D`R%`w83ebq1~Kz?6V$na zwfZnj9KWNBdLxC8W4twebGH44Jb&c9`|bIob{bIq@wZkOI?|-$k-MgBh zaM3X9H==hIM09|hX)c{8^@za$?h~)T^tPKST^ne`rq!hJK4;4;KkJk9zu0TFG0C+0 z?b7-_Yx`xVWcM4_FT$9_(?k{75w1L*J$}D}3!G}(H@2coAW^aEg_*#r*sESS;XN~Obi>f;-SgOU~*6N(}{O<3OILSCy+z{3<%`;~%LSpP&Y) zF1<4Xh;MXlW(uyG>za{9NFoHDFwf!~9%W8*M|xPM5t;$!3Tvu3BQE4h>! z19MS)J8i9x^Y?2{wK^}pOwW{d-Mt(~Ec?y&?JBA`27rU&zXYiTIi#9XKsp7p+>3Y5 znPyqbza{0giNP$r%tTK{pgkm}%o4kH9Z|IgnyY13o zq-{EwLXNJjXn*p90}|3{b^y$Fhy-25njLTE?WJ)+q$I}P%*rLWb{OI_Qhv^KiMJ@) zy_z4|Ym&X!Z{&~>Z(JU|&z1(IaE&K?;Mjs1S%-|5Cpq9OnV-LBt&s2nremTloY*Ap zOj)H}{iZXlXvb_KXUzIxSc#V{@WMoR#JmiTOmzD7*ndkBPl?=fmMJUZx@w_H|JwrL-LVziU?HZ>WRZn(2}^8}!%%^k;kq3KqQ;8Xv|?+@ z=xNqs>wmh_{l<+w>$5VZ#7(ZXhA&HJh*VzNz5FMqayf_OvZA?bV$lhez54F(`hLeW z%`N$yNuU)MlG$A1EvG#rUe_29DYV%_jp$F;AD&A-A@oZGx(7F$KzQtwFm*3hN#o!w z|3RM}4%kaND-^I|rsETvfV7gK8zFGvGK$j5)mp5r z{_(W-xFX=8LiBaayf^$A9S~R+JmIb=@|dSh)jBaFA>ly5Cr#IIuT-Bv+1$YEnTDifzSYqDbxe5dcll=|UVI3B zHp^r+JW*Oz<#%KEfE!$!)r>{Da1HZxs7!ySN@?P29vc(xmTM5NW?f%9BI;@<_0kX2 zJCj%&e5|6+ncfGWCh#kh0s*$zhwC*2zJH4O-lT{3Stl=%mu4{{N`+Y=^(9`&??T!I zimP?LKxZ0%x^8Y^{5uDZA4yM_LOPl2+C6m{mw+^DbD|%&JI>-lblu(iIs?@7)8k23 z{CJ?vov?(>>n~~bKCxhzRLEtheHn2hH++&XIDR$yRr_uk#^Gr^i^BBF$!D)$lYa~^ zpZ>Me%(l|#;`*Vr=UlcDPc#2%p(l$@yX!s=b2}cTe)!bDrMa)0o(1G|B5@9Bqs*Sl zuyEqpZ3aG}VqdQ%Eh?g)w%n2a$+>-tWVY=?+@gB87khgzAqmP{f8s{1+64)XmSWkz zpZqfqgucpVF{rP;>mdRX-v8GB#DCzlM*EkPMPkeS;wL;{aYMOWY?jT>sp-V*mlt$C3BEv^TO(o&|X)Bwb^87+uqjjmAb}+fEwWN#n-0wP71ujcwbuZKtvAyn8t2YM)SP1;Q1Iv~VIoHt$P+MsJ?Vv@%Ul_00 zhCG8F#SbE90k*U58+k?c?9hEb=#$$>Ds5IRh7p=S%cuzISv67ZW~ETrG7%)H+hf+b z_sP08-JET(kv4lWuZ7d6*rFJ$O>8F}jxZ7Ym^ z3s$|UOXQpPN7{)_t|8^9wFX;`?-gw`_kL2w;gJu+O6~6eT%vfJ*jqZ_E&QQj?u5$c zN(Y#KYo?S1>2wnVV!yLNw)O=*`ootR>(7>cJBs$^6b4sy-TFif41z~gKzYl6CC8k? zMpzn{FDNs-zkXvka7|?D#QP>XT=$F|WPyWGwJ}EE!pM&8VwYaN<%b^R_**F5$c-y? zqr+G4Bk>^{xZMsgGuZm8)5C*bU~V8dDYnl3*IXwCvM`eaC5rs;vB3C!IFo$lFaOnb zN<#J#2H2&JQlW|-;c}b5&|Ay6Q%I?`%5Lij`)g7)(s&Y=h10N3Qs<_EiQ4CJD*qy8 zJ14>!nZ-Ev=*|&AKT0BEs+lq3sFjI7yhMptv|=hZAY~ylUaU2Ff1}rzm@}K{#R-Y^ zeEB&NB$rL3y~XHB@3yc`cv;>U$Z*^7h$YVCxK(r&UK}Ir*L2EspcP$TMfi(o`cKn+ zOcHO&C^x&X%QRuq_xf!tAWDfuzj?;C)_6BhX7dEEq)oR*1DCvWXIhyloAAxUb1`NI zBcIn3nEPeGIF~~oDdB<3wabU`qbtQ})siJ-mN!4B3bkk%ndCBbK+Xgju4e;q-e4s{ zm{YDGdOUZlfA)Ad+{p+f)_C)ex?S>Tam|1~bf*r^`MsBCL%rv^v+ zB?I)w%4mnDhvfXud*Nq$p77vqj}^9eE-TA6u$+Im70Cl!%Ss<7w^~;Hwshr=i^f_1 z>cVt@cKb{=MrZxlxg0-^ZhVA~eL=%o{(#^ksJ;216YXGf;Gwy;*9*S|=>6qorva}E zQ^I!n!9X+VF#@;}VHEe-tL}aMWPFJf&xZ0$rrvmDwQ@pTG4o6)Jwk+U?!@-dPjj2V zQ`M#VDlIorL0vXJ!v2}+ZTKa$dM zG^tr4%XSKbAIy9N{R{iRWEzfI>p>?_c*{9v#@?tnv-Q=E!kF7mgWSAD`Iex1(icyp zjL6Dk7}L@;&7Cx@q5>NFHC%u>0;f-5|A&&jCRdq7@@=Q%Fyi`oi-hEeXb*LF8iZ%J z^pjF)X4IqRHW-fqxf2@Nn$Q`9w{x!_dKR9h zOaGH_yH}oo?^J7p0!S+zExO<0mdnl4HqhMEc0XaT?#pA4&Z!J3Bu=?Hm>Ip`h(TKv zJsIwJ_$DBE_N_iz>bm2!@Ylj>HJlgfWd)}%EG-_S!tvr2T(DVw+3VGYu-csoOAuj@ zWVrf-)9;_0tRc3@MJ+J50~qPRsGZXaqeXqpQlcHYrGr?`mawtb-7d*eQuW*@yb>JSShSaT|fk)KRo)xIN0&y#2X%)2(y;i7|j zA59@P>Ghvm?Ibmotd#PJXMQE-Y0}+PJD$7ZwRIK-Vbp_BG?~QVftfR^*Ug&_5$cIy zs(e=0bl1CBr6i4FQ?6f^e{R>V2%4eMGcsAK>chEV;y3btT1u<YK>?GQlE5&tCB0ejN5WTB^WX!*1 zTx$J@0?)|1leZMMrezwp{nYjqhX3ru+kqlH-Y1-&JltM#Cwqge+4`8ug`v> zoF&Q&ABgDpa;vy+3yF|i5MCL9WcRq`yX9JAmA9js?6zB6oTlEJ&`gpANNO7S)o$-?vz2)d?_aryAOt_sz(E%I+p7>MUn#*yuI2 zy?A6c5wn0T-Nvhqq*F;FH_0(1N;x10G9?O&QB3Qk)ygsJ#i%8d?WStvKJ07> zIhl7g3qE^ML1O(AmDqpSzJCnyP5VZCv2n@@85sZ_E;(7=fwmb-@tS$><=*EqP_tPq ziAPv8M#EM)1m*j!3WxZ8!Q11!_;{85r6BD{FL8J5BK;(`FsDK;A!Ib>_y<75@E3EN z=LAmRiOeIl&=%o(z36ol7>@&=gDZ$XK@k2omsh!B?J_mzUFj70(O2y$s3f>;oNLM- zwi-YUdKW)D^Ok6J1MUy&2<~M!7Ll!5UYtx9(e1}-HUF-&1S?B72=`i&_WT`9PH*qt+b!wawQpQd zb!q)!Z_1H(Z7kc`e9@%=owUqcr^&kluVx_A`1|zH1${Gq6GB=qk34y&kq}*=(=@*! zB!i5S$n77TQhuChfpf#1pG^1|JkaM($r7Q_b`Klj0g)bi!|WmoD7SpD`!c?ExJpE_ zU2!}YQn*CQ_dF~PFNKf&B&>72b(~Re6LBOZ{`!b)mZwFseaU?+0n*Q*M%;c>acV%{ z8;A1-$tSzo*ksn@oaE(Sod-^y&aziB*HLND;B3Bz1_&?z%a(?78I8_RqHG=;deH40 zCMg9S7}SgQ9sQoJ~84y#namqcI=F?Q2+kIEf;ny&RYzmJ({;7 zb|JM93eng8Xh(p0#9*G!OxnhvgO>Qy+!QpE-ge*v zb10jmL3nW$_EoX5`9?sfH+#-W(4aw($*^>Hr!A<;yjjbQ-=E~zAdgqT(60h8deyKi zRk^xyVG|kWTsd@74OUk4d&{1IaFvH zlmN!N*$&K4_X2ZTJSx4ZlO;0(@v)vKezMN7N^=HW*ucz--)m^=twY!Z_naMU0PZSm zo{E0;>v!2i6buJRCyIMiXncTB0+c7Ah)PFLe*lFhwBxly1%lgBP!e1SmrpE7)KRf= zy|}kz_UG$&Gn^X8+vPihfs6za;}8e<)-yjdR{Fg|yZ%Z`{i(R|A}=3=kF60QX=}$I z6iG3sBO3ej(QBKdLyY|0g3nzERyw0Bmv69+NA`=+T!71P%@+NXGUm%Ln zSs)`Vv%=A^rcQm}WiPSMZC=^%GN)gAl6cQHD^z^CW7nZ9Z82t2ARqf`y4|OsNY$3! z`wMaeLKSJqO4~#fRhIMca#?up=R$Z=IGaq3D~3n|JqxVN_-Ngg1S(bMn}~K{mUJko zLO(wZ(JN0UuKbp`mjj$*)&)c|Re!*{;l33qP_ZEKnh6x42!2eocbyAQnd^q|u4p*m z9he(N<~co-5|V6n6@i@b+iT^R=5yGuW9y?K3Pob1Zl1m2P}g9~DLLkk2D&}tLcfhd z%-bD}swpM5-4R$=BjK@8tVw}x>9#Io{>WlDrcur2S-{0S(*r=4D!cfIi(>hei`{Fc zv+H$ui1Rp|@}TMtI#HDO+hS8t4mg5a1&Tb`u+eIhWUa6)>Muz${fA2!V{8{&*vWMhDbLAHV-|iTwkW6OWMf|=Kb@6~`%hxC&xuNgUleoK- zCT?YPO2!_6*zjB7A~)r{-;qt>;vvSi7vr_*C;QPj4i{ikI)Up6wxj~DBYS0tU(Dk^ zxz#)h)M{-CuFWa7Hu2b3GzF}c$1ahxV^PJm9enQ0E3aLW^Y1a21fCF%hDLT;!h$2> zwQE5z3tbP+JjylwTKU#D5v7aABRzI)g*D7Xeh@}24h%~)Kus;C;HBMmp)=u~s8xr2 z-&G1-`2_ARuRSmVLUe?nr1ow5Sk?j+lt%I71qp>*!jLVikf%FX*IPCzTH5dL8FZT= zY(7(8-)&2kJu~Gu`YQh%ab;PAi5+0JHc_T|_6YnklRQ^rE#QrRtF-*>T6dgI-AY9q zQTA4Mia+sQ1ds=!&G?;g;Q%!FOcwD$`P)Mb< z;M9OBZMj-`t6M$WLxGeTnoM zL&glVbM)Eu_8QpH%`o{;&C0LWw*a8FowF3LXv*mr=4qX1V|d6fZ~8cg*dkg>Mi!!} zMAIf3w$Gd}4A``~A5mo;8A;~|MdO=a<2cV!q{#Ru%8{(~12#38m-oa~INfr9H_&<> zuk?HZtz*{Cy+Fe_3byY69`-1K6JG_^jT>r=Dh@2m2tL!Rs-j3@KRUd_d;tibgnX); z^5f)1mbBRb`K?&>DpqYz_?SPKH$0oN9#F;{-ejg~;jxU}hBoI9qFGT$LGP(`Do{mS zFu?aV-&aboW+$bPRtulCA~M{zFvIq4^r9U0A;%#0n!CwazAyinp=E%4i)Fr^OZc8w zu4Tn`s4eNwSiYGaZhX0^*8~{N37}wkkWy6t+gF7$xO?P(u3Vukw-OkL$`ut!T742% z{b}2w@}34dg}@8*{k6NHS(_4?Ug&xWN4+D){QO984O%khv`^sT#SG4q;!l_}y4&c? zVcK-4_~IP)3uF{ipg2ejO)EEcHGHF*D+I40jh%Q6B+bsHNjZ6+CNwZgZWk=G9byxz ztTOx2!Xw#rV@J^6=^+NO|b$j_)Bnaa?Erx@_A!)QP{Gh6XWDY<>h@Vt&6~ui)Uf^*7hf)1D%Ra z#+o4<@gD_-%+;r20>94G?E zk*Ej{U9!>bz$qA%t=b50!{YVFwm19aVV|xaiEqp)S4mnCZr>Fy@fTmDY=V;sckZo> z-*9NKNMCNiFI#`_uCJrXN09MdWeqbwKjS(;eC+$n;ZuA)zo?7*42#&ZZCauhgetpI zV}kcE(zz?Ex9PdmTq0sKc5c*de4p`a1jom1hms_>D-9oh#pN1y~)wBgOzT7222;u!N&%)r$Sg^EFqZS=%s zz3UuTi9fI$Tu&LbV)ko}hhn30(Y*U&gx*LCVgwnUW^T?F@gjv5R=CmM|NJ#<-5frL ztxQ4!W@2jD-(daM!wUS@uf|d+rb4Y&alO}Bo%q6A9&VVvKJT4aqr6+_ ztsRG9@{{(=eyCRpl5Wa&bN^3InS#R{GYwuEPIx4i_R2F$KMyT`J3INNPJ0P+Fw?o||!gudFoHMQRvQeKNkbH|Zq_VO1h&U$-%5LR1=NM@xJm2xO zLAjikwg(CsrJP&KnGrUuz!H0yi@){Iy_{$OBhHIZ5$2jYE$_I93yM?b!@3fys!9|D z61Kf!#!A_i>h#LPe5yi(7vA@64R`-n(M~4xpW#R#lw@`YI)D@FLHcpazWu!&7k+HFdzAuYzufy?N2?o`mzGFw6NVz06`cjpJGS&Yp7 zYzK4==o3q}qsdB^{qzx2O0M45fR;bN&Y#$Zrpuyzt~jzh5P9ts9sf&&lFKtFia@!+ zUs|!a3%V9Ul^Ys3&l9Uyf7>Vjt{zW1e-E9}MR~8G~5-qUj!?(5Ng-vlz$3WXf+e?{p29_qXc9bWMj5#QC10@mlJhoD_j8 zV-4?ytpAp~#JKOuYV7;2OOV-c%t0YT`x$}iBfSmc85~;e=p2LbL)ml}kie+YQO7(l zQ_c8nOSgmTep;-me_2kms6dvgNU`Dv>(%Hc1V?anA1rGvQMpabnkSy7t7<%qlh0l4 z=&@%FVDWJBAIjsXAlJB{gfnW!704U^^nPWL)|dT_FL!HfJiZ)bs64GiAcLAxK!)w9xPGgV|o91&pNt8NT=XK8t$Me>rn@Csegr65^Zh3JH(3#Vm}{xE1XuTfcu( zg0gB%X|F))yhg4nJ2SOmm~Ii{HXsPG|AMJGceXCDWFno39t}21FZaHI74NMT5;l;FF|-ECWfJV)08L68)0v_f zu|re}7US{LB!LzUfYQLQ-5_~r(L!5AI;;Yo`Sb0dio&sp3j13q6RxYO2O=ZQeso6u zB&&~JF+eOOTT2;$%F4!d+7~b$hz}48dg=2l=b_iQZk%a^WcZ$5I~-Dl2!*{hkl&X8 z(o&>?^4PUoa2C;+-;r**RisdIU`~o;fLr~WLZ#xSISju`F#xnOt^Cr~*_7)wJ zH%S<`_Y0CaPgLX%G0=8L2m@^{5NS`Z*C!G&gOt+4LIt$f8%rylThNf>fMX9H3b)95 ztO&#MFD~7ppA7ryC6VHJxTAq&Q{H+E%Z`YP%+^PQGalwz(Y~&2x8lYhxspjQz;~gf?0o{7E9w!h|u_hOlX%qD$Kah^ALXbs+kFMYm20YTG5Y%5=oRPe0oev=irVe%%{3Baiz=n0BZTcXZ4Bnv)Ef!Ciy#ss8#@XiHEs zx_roq3fK3shI&FR8d4CVb^ogS&=Kt$7kArq&R-$2F%cIXrb;-W@K3F_j{pb0GOY00 z*XxMRrI79M8DZ~Ge9Z>pokh2%RBZxiYU4L6w zyUk6|W>%JC#>p9@hLq|ZI>-?`toe)FTi#uxl=8A~OL;B7|0epA^B4ST*n(oO1K8O4%w&5J7i@NQ$G*VIfP7IpzeEZHXP z+NALzrRV8UnF8sV5jJ`q$+GMid({^Kg26RNQs6D*^n-)LK-hkON)S7%z#9^}q}!8P zEBUODu$gK-bYfEV*E3n2bcR50Ci-XVEeZCzQXb(&uf*Q}^E}0FuDRdSVQ-#D$QY|G z+~6I(K=m8D(CP(%f4=f%p?*@`VuY}90b_%SlejIIg2Zhy1>Ll%n@?r_r?$y}TH_SS zbMR@Xlw7F)4m;e0Xhyx}NC{bNTw!a_KVWHIl@?vUHqpg}6O zs7u1)@L-;SN>+7Sw$)~*A5L`uG1)2`CS#?`*83%B^n;~`ow z=L;xfH?^RHla;gVK0OFHTmlG{um#$qj}mW|4`E%yP}i;e!(1$J?!5Rw6bqB7G4lPv zcuX*r&gq}2QcR2Kf19Ryce0yq52GZ$n_&=easKS6Q?^ezweQ{9sJHc`9d`;n1euZ$ zb!GZEHgeS!XCa@f-iud1F^UL_Y`VezwPFf;ue-nG&e6wS$qnH{>C?58PN6WDt%!A? zD$h|`46hYva*V~NplD|RMm?_<(bGYlQQW~1glka2^6#YFbm+R-LzlUUPIUJ0$mR*; zS_2kXqWzJUXy-7noz(9qciS#bAv~h#%S{}bk#} zQvQ(giO5*M##5_Kf3;KhFm>MGYA`v(Jab0B{*~mIaO=Z>1odVz`BeI^O$uG!!Tzwt z_0dQ$BYwzMHS1@+P!}P-uV?l;CZF$1;hs8~#5;tnfVXuDK#40DFwm>-OVk3cBoMsq zUaxt);sFZE)tV>bj<{(uEh zo=53@9lwpdR9je|K5ig+fGeOc*)b)j0m(bWL5W1Tw?31Lzd5i!>r~%9Od9rzz7@!t z0zJW~-X{tL(n7&9SGhir5viG()c@6ce^aXQ_*t}V8n!Q5;m--Z3o?H;woriO4feN6 zdM#ZahoPz}vV3#C)^d@)6=Slzc#~qzoTchdN0SXf(DG`mGV(%=y4jV)=DJs7U=7)v z*bTSm1AB^RGesq$O#QYNuct{b!vMqM)&={c%O}wnrLrH$&tXr`e?AETtZ)q;^`%uT z?|eIvikfdwf6r-6+Mg017Wp(hX7hX?i^>8-HN1#&mdzg85KUObLb;6cg9xcPl(vF+ zCc2F~PAOX`=#Y*Cz*Bi6h5HPU#g5h8z?8FTcfcN;*nDgA6tsELpi5t9B$O znUnkRC~l@YJ`pmgv>F!o*HXVP-Wr6wiAg{!#Ea|PTA(0}OeEJUOWQ_&yzV7F?tvS_ z9F9oZfnYE-h4Re~I!n{Uww^Yd@*%^y6mo+70tBc-(p^R=O1-k^b=}fdoO<3#&o&_q zmsx_p6Yhh)%AorT2rnApQxjw-XEq2t*;U~9Abe*LYh#QrTqYH%1?0@4@t$Ft2-K-z zf=8N|pVb^DT$lyHXE0Rv>LEnaySL4;rT#SvuB-RjnB%7ZYH|cyxvNZSAEK}-iGS2- z0g`F8GC%%FE!N7**$`Olx6$+^qu=Kr85`m)H~U#4+5EOOKmb?VzH zNi$hizLvG7t5f@`yLl(^+BNZ^M`xD-Ioc3_DW!J>0iciIu1mk3U ze77dk_S=7AuBBf$UOhq0**D9>RSy=%0l+sO_FJnE($U>JYjqMvpg00wn#XL)Tf!IK zSrDGCv1o}iojgpJ?q8(Ac6cq+;@Wv{{k*?i#O<|lhi_rN%?z8EzfwFPHkfHLb}P{P zxqHn)>YR(llqm^OVZ3@e5rU9uSTYx;f~oWUDfT)2J)|foCn# zhN4sg*x!ngEF1VEbAg&IaggSl-PX_j!{e9_fUt1YE+L(p8QJ2lp7cQME>R1;`-Hv0 zFP0WhOwlg4ao9N!F&)BT9^w2x2RJ9B2igkIntkR!aGELW_WE=<71~EF^eXlbC~WBO zi7@J}o$`BKPphfQo$Oy>=8~d#1Z$L>Dr6cgQ9bG2hL%i}Te+Gc>-LudZ~JlMwk7cw zZI{^N&iC&UG?Q}&d;R79VThb;8~ zv?05V*pC(7hP3N5pOIh8Cu5-=OJiwxDo+i%wGk6X%hl@w0jti5`=pb;kVxa3n~}yi z(`n~cM&?{!kPmDxgrxc3UEMUqtLLx#w^8;#r_bUY&Q%v?nY_26u|JL3D|o>@JFA%A z%Zgtnv$bm1z%G7?Rdr$h1!|u+PXg?|Nn7#Z+O#G%LOS1c#cCI{{FR%rD$GB?8T~7H zH^Ww>?)8-ZdHYeabCdc+#b_d->M64lHw*bKY^(h~w2i5*d4h0ed(pu{Pn@^&K5JBj zF}&yt7*ZnK>2(_4&Nt&44FKzaITUqS!Hqx~&I){9$E4 z$XhiCkD9e#3=xa52K4xN!I`=YogyWs6&#FM$v%RLFi0dIeKWlJh*L%BB{!!c8bI#= zRa)7Kw^x;a!psfrHW)F<%j=RvZ_e+$N104|>GpD*%)g02kj{r4$`s=9o9_DuwLUY~ z`}vWthwT%PeDtf*W|9ww;FMcB^x3UNwXiaji9D$Gg_f1-1<-f5c$RP<9D5Ks0`;Ph za)-9iYpxsDI@YvC;Lt9x4{H~rAdQ|~p@}pLi~M1(2EKo0pj~3O+@8#`iDJyn4^a&l zHjM9YMi;xug;l(5r`7zEjqf$<_3#ZB%I%{cyu;;o0KGIX!v|#b3+-fN{xWCaD4W_0 z9p5_CZ70MxCLE6G!uNu?lVw)^Dk6@gQ_(6e zSLa+1D@*}<$+E58K!ZZW$hv3KTH)w34L`wrXiZ(8mL0l1VWPR_}m$l zd})%yOJ#p?xSi^}Tc9>)+reGvw||qfXNA6kWZrA!2ln&ge)N_Hp6^C_rD0o>p}4i& zWcuEAKr^@C`()b`=+OzAgE5=EMx5MviR1lktY#TS7dB^WcbLhWZ}NDCg9@p%6Rr63@0 zeaHDt+ww^Q5Ql`?lJ_AWk@dx{VD8pFxulz}c8f=a#$`2lFOw+Sb2g-VhqK?^G(r1!3==VJf*5i#la%2T5Tnst`M4pr4O&36ki}*eT!%H2m9K zX0>pY?uWQOF>iT)PMn9{58Y$Zw98JIfgl&V<|2vU_@}SJ^1n9hdrmUqMD>G79*kf@ zDw-p4Q4@!=@Yn+=dei8V>pt5I;A0{SeD9ZsfhpP{R@spT>`pxXE~J?AxJn4_7UmD{ zmRDX(Lx~7<8>3R3e}amF(jFe}+Vtn@mC41pP1kZHC8w2p&g6B`*iyrs92UFLz}!Gs z$%Ju{Gi{$&;FHw=U#yE7rhJPXnG6suV)TRT@UR3A5((|e_hGQ+f(tdhPSfvrKUU!y zWTR(+T*V0kT4}Tpw6wZ_Sq`L|q1X4pi%t2gdxkAFYg2-)h^TZWxobg&pj0q3!a;WZ%h8|Pf{V%=C=xsk z$;+r}>7(5>OJe-?9TfuifLJFm?IULCFO6bM9K8uE3ex;+g{AE(vLt z%I!e=OfI?DiYF6OOkBUG)rNLjTk?C38R0`@A?g zO$N?3VLL-Jj{$3~Xx`A~aB|==W#lQN3`DM~F={limP0M6%`CNxfJ=Atm0=B3WA9&7 z>-krzYl$Uu1#=hNATpDT5V$O@eeib2!bCvx=9}E>rq5~*zr!S1QY9&Sd0=49U060M zWuKxBd;CT7dNTZu?qtD4@|=aOCw<$~Xq%XGQiHI`Q98lc@-e{{#NYkb>wcuFjI@nR z<8bgwy4=cJK&rzC5O1YEMtGQE`PfHthUP4qT_+ygV(HP~MTvms?r2Qp%-6F=_42>VeuM(9{a^ibua20J0@A1v2f+9(*mSHuEmE16X{}=r6Yk)6aJ2UZM`TGq6 zg-a;I_)PLbU09Sh6rJQNbf(SZeOn6^k6mtnFL9az38+v1g`KJbk2}h}*A6)+Q+Cd_ zLGptCuR2yqU`KBf$B2|o*wzR@dmdg>f+o+o1qo zN@F}(AF@Ne@b~ZIGCK$5wv|;6)vR4^R*88>P^u`X_q1qi3*~R|1sW^xPrcwT32PYK zvT5#O&<(JXNg`Akf1f(R=Xd_ip~4}>%vu5_f}4YZg*ZwwFF!$bN>!CgXIwME2UChW zax27Ad1xh?16``!R;?W*W@F|mJgZUHrjuqTuv!o&93xp2>Hx4;jD|!&_W=j7evG_#b;Bim<7=XovN`KVY(~O7)>j4+iaZUq%`}ZxkG10) zzi}w!doWR{mEdY|=W2-oJDE(@9NX$G5ijZduq3QdBBNEuzt5%CMdA0#EU!)TrCT166z+OO_Qhz;1C^I#v3P$wL@A!m=oHj>W70#9@UK_W>WDTf`;0OyN zSCnv^?1~VX!Xou=#5mt<{#f;<@$%8mKyH^0jvxhPsc>(37evLODc%3^YGCl-RF4w+ zxIZ+ku|*phn0)2TpcciGNb=y%P5uNtu|d$!or{Y^;oZc3(YOxc3>-`?o>#AEY)x(B z$E1>oOp}L0iT+T#4!BoY7>eh;e6qv!MJcsxTg}N)MX(58zCOI=F|#Ds@sT_D{Zm~x zx>xR~gOGs&6MXOD7)O1kqdU69m-q3msPoSn7(T&*{AN09jfC-Hk*o{MvkxWUdO{^2 zuX%e1Xo+4^-%P){#-;{H4sgk1B>ZV0CeXnG?NF`rI80Zxx;XbmxdD)ozNnp$q_H`t7n6S2l zdN7%hejnKXnr%knRk#{Ee6P+66hq?fe#QPRA$h|0J>K1n*Tx zdmci6dJq|=lu=h3MwzfaIQ92Qrw(oy3iaAL6P_k>H&}hP)1^i!+tXrYs7&V~EcIg* zhCc3RQkCFhuuYBmC^V_|{g}yd2v@;EC0fGHd41YWrEAI}%P<~Ok02YchO93nNd8If zleIvy4PILn-YFHELJF}(N?VEIwZbQAm8RWtx0(~6C^-kgOckb^sHaua5F4A~VA!Oh z-Ea@FuN7{y)JqF%tc-Xg7B@}nYU@8e0Z__m6AqRUdbaJfbGll8sFM`yvnBJvj|?Jj@cbFA=~Uk0OeccgqxdwJn};3x-k!uZ0R`DecnF;X23q;aUJJ z4nJrA;kCpPya+7hVEVu_+H>I-DesKa#sedadu-SELi7P?;2R5iYW6Hw8ORp(MwPszOEe}+>y>CynDD}IW$5k-onat1rB$7$N< zU!5N@mBzrfi+MK3&szQkoa?r&T(-=L6fn&x*NlhI(2G8{Rxz4SDzyxhX$V){7VBPq z)wfvE$%H>jLMt&tY*C4OY4Gss$L>v*5U857laiH7_UI%o7Ff`hv;^h~{b*d9@NyoQ z)vy{9OVx7)t{w}XPsnrwyQ9-e4u`TXu%X`27TEyiTlVG%%sKRXnRulhW=2O05(m%s zeuC(oYPQEdzFEJMn&7LX-}Y;3<>1rwv;4sV&X-%sA(G||sdsL<=gbZu1iUHG7M(dZ z*@Q6GznMX5Nh7N29exNtGK_d{E1^uv|G1p>Ke-D^?ScO6<5PfH`&D6xydvS@d3lvu z6aopTInbzzs2uW~miz^$dq}rnCjSDqTW7*v)Ua58W;-B0-~5qvx_ciI>hUWYd8H$W z`AIzhi7SzM&H|ROY0>Iom~a_a`Xu%NEeq>7FZiCyymn_}f=9u%ld#^Qrf(n-5`NtX z?($mu+76wX|7cNkY65!_8Os&zQmtnIwe~fCw)qm2M8i7VoMStkC{yTOnPA<{B|StqHGz0&E2N189~zZa^{rPKXG}!47cOPYCFja& z+x$goMHitW-j?XcDN>LvCk9)_vJ{|40d@NAnKJbq>)S+oO@Ev^)eF@CL;XuS?4ZXZ zvR-vA&79M#vP%2ozU7(l;I{ZinG;1;OYrccNFo{y=I@UKFE^zWHRmhMtuAB$tzCLw zy2CgRCAefsPsX8Cb(;>)kqw+Ndl|(+)ud+2`Tp5w*4(si>YvgzfSrz)g><1Ok5Egu zgIVI>uce1dZLYbM94ZGP;g2dnpmsx#!lqNj=$JG9_|sH3!MYIN?*eI>sH(udRBs4% zk;F}Oc2&_hvg(#LC`3H1Dl!Qe{i4Bak1d7-P3>_dLuYY=Ul6)Z8EB&&Jo}zOEgu>l zS_(~BsARjhVwM(s)Y{wX44TWe%6&043eP1egDs9Vh_2H9us|lr0RJ?Kj$5I}jJRz2 z`$@stOMN8xWzLKZVR4cw?%#o&NeMlPrU#33wVek3h=*IU7<>r1$k{reCOI3v&p-53 zih-OcFo%Y*B6EhrNGmhWl`Z&(%g>=tKP^vk0SlA6j&QN*ipIyp-XM2K{2o&x<7Um` z9U*b2@6F1-OE;~YH2!n-w`9fiRBS_|>?NGBP*OeoBtd_+n|tEwjsV%?Oeuz$^Rv9b zUiz_^d}xv;e)S*o8J$2tBLakbLE&mwnKSEob4k8}FhmZHdqolvF}j`Y+0%;G;MhyG zVjS<5;iTYm(6&*OH-(O(XI^i=caUPUUmWtmR2&mO-6r4Dres#FSTiUFGS&Qzqw3qf zBTHrFu*+kb;EX>r%;L;1kRP&mVL$k1J#yGHe3%!e-%)#Ee|=H&TFW+2Zz6R+qN8;l ze0*L93wC)T8;AWA-8Ql87+Pb{#-31B{#?IJNg%Qz_2DKl>6dp{_g7D?nEQRMNQEv0 zPk1X76FT&^*Hu#KY9DL5#d8E5GHVhv=~%3`%&A+!jT?Q&m7+^^6{ifl@-CB&jI|Z;ibZ5+kgWSWf+~-oUx- z*Or(N_*|o%mfVgml?zKOukY0VN}pwjM00~Egcd`+fQ{EK$uK*ZUp(^*HCoTr&Xt}B%;9g@X&l%FFxGLg_iv28E&-^M7}Bw+Y%dCGL= zH2Zj`mIp^1{d--lE+P5sZIKwL2BM^4^|-fB0|^9yL@E2Wq5fq~6_s{<`S)Z(=pevVK$8+sqw5xGmfxdbI!eEXZY-!c|bto|u( zh=m^k_^LL1Lu%=Ww&i~bAJA{5i0(*Bd>^cB7pxDVVhyi~@Gf0Edu?>Et_Z`qQgh@R zrPk>I2qclBTF2I`Uc^51fJJhGzUy%=N>kr$zT0P$*LQXw}tWm(xzz3Ww<^KEkZF>BQu-|S((P0d+Gcf5Ypu?TqNr6#UZwPJ{k8G zXbrzFv#RfU_5ppqA&3wquPVM*>G}CExxDd!x4mGdr-0pxKwV3Tu&tK$1}}%Q05+>t z|6Vn*`iD-ljfsR?>7=n6%B@J$OPgLs3=1wLW=H}1P^c>rU$7uJR1Krt|Gvv;^C3IR zo^^$QB$Pv@;X-(}wy3KPsx$}9#dm_x2$txFSm_aC&lZ2F1Vr34XYuaK1?Et4Q1>SZxI zm0h{E8H^u9iZb93a3CNcFd#)xO#<!(>e6FZm}i8M7%d87nUP z>!OL83mX~rKZQpco0RjvW%~Zul>Zq*{IOAC|1+eAVW0fZ5RNSj{hu-xhYbPwpE8q- z%>nhL6v1X<|7S>s&%=KBPlD%TpZ>StDj&Pze_OK3v9Q|4)Rd4IB1IMo40y3C9b&7-i)tZhA+w{?k4gbG1;fJvW|EI`KVB`LmZ?gFu_Wpma z73Q(q{_~WKu!ybvpEOwfU+`qLW=2*r~hxspni?20Vvf_Wqrt;&$C;wlW)&dk& z8HMkP&?>}35$^rbcK-`2Z&*P=a1~a2ndWP(rcu)k@lhd=P9-{~S!o#tmL6g9L8hZv z4T`0uHCFftGErxU)Y7ccNT=4cG^Md~{{L=pckj%dfA>4*eCIpof9(u(wyR$f!NKp< zU?JtmX|+}4s5!5$r;;K2SM?%|aUJRT6BXx%>7Aw%}SQ*9h&es`=YqvGgs~|kyCw)0C9*N(bTpCm4{E6j0{(fpwl0YcAkdbC;QDF_!p^@f z;V>teg>fQz>!qgMQGFD}jc*FB-LB`=9ln4hb`R0C5Y4&$1{##i`V-1=4Ep>l1ARQ1 z#R=Xl7U}L|QIxSg6eXdH6h9@MF?>HvW~$Ik42#c7bX^MLf*>^hblVDaucHtX!9Y(h zUwKw2N@3ANvM>cnuK6q}xJC}7Fh-VkvP>KsK{59931cihq7~mRjTnESy{Vz)XSxp6wAk^l6*m8XZTljiE|s|`>A6%)dc9o$iQq_+B8R0R z`ohmr3RI*Sy}Ec|{^ZKhiqeR0nn}ZhN~DktZD~v+-mAo5d&oeY>2eOn;TV+oxIoi| zRPxFsRR9VPvvops9S5VJgg!>ts5iWhVui0IPE&tp5k>Bh!>$gh>N$ zhMc+HnTUEX8R*DNri!Usy3F%e)2?9Uqw~Q^j;S6?c$AzvnxIXY%tm4k5{q^)Mp)ox zChJS+-A+VL&5o7m(&nh%Fy1NEPb1UUZyTnyPT86ULYvnbC`z<~*J!;`z_|?Ck<|D{H1K!7RzAFdSyQic(He&q5zqVAIwJJ(%tfDZVQZYKlaHv_P#=$)~ za?zyaAb;Lu4j;U(s{ZoI$>?~5Lsbq-BsHH9FlQ=rxJ*DvG{)({Y~E)Q)#S8%Z9v3PN(zWvU$c=*xHVuFq>;^5w`#=ycn z5~!*t z2srREhZEnc_rkhoACg&wCF;qS7}wBoAYWqOG@! zH;(FsH*83lf86$J4&~@Z0%|F)V;zTS$JDrh+*J=$$M~iOZ^Uj-@CKX-7qf{}HP*(X ztFS%I*q-QaPKt5`-P|tY4*TWXAFk+VrVG&Qwqp~A<>)3R;^XF<%j87-i*R`xPQ)3P z>|ciq)n3}n!8)A9ll=7I2%M_pFm^cO1e6j`{w{~r=pn?VZ`d}=S3{Ob+_WvC@7V!m ze{yo`^R?Kzs(_Zye2+uc2-&(RBQRA?J%)Tb9{QK-D1~Zn&9Fb;pfFpyIF&zjtbZ>;1x#L#nT2 z{6W+0aU9p7CYag%r8f|t)~dttkt~@K+#=w>2_2kP7MP&xXRm)qP2$?~$jkSy=BTJa5kVKKOljR}%zVF*3ldUI&Y%`W3G(_2D&Az2X zNOl!j(u}b+D9h`3p7*-m=RMaozt8=>zxTO+zjOXL*W9Bqi2fJ^LJte0VSs>_7DqBd z5I9<;(co%R(1EJ&tggXGE7Cf84OL2x#M?Wk;jAv1=9xq#5!Skmg8IgOfA`RSQ&0FF zk00r@OZ&cJwzbx}zb1A=Yl;QGHEy)IZrW84J8)X7@ol9DR)X;KX|JQ4zHGZ)XrWE= zBxT&|uX3rxLH?JEYDqX^3@}$P)HI(vpfix9eoh?|s=T&vmH#_sFhaY=b^VD$mavI9 z=cGN_gmf-l`&~eh3Hx8~h)r8=UQXM$a7#Y8ZI-EtkjCo6t*-|uUn#k(2iH1Le0Ltt zNcjZZ!#ZyTxnV+Oxjj7i_K2UID44+r2AV5~PIJ1-$Ff|?f8ubIVO$t)5O@CEPI@`- zb{2fSz4~K0b#P&>^ny(gGQ+1LVQH}_EI1__W#d!WhVp*0u4bx!LYJv_bMfjFe=tm{ zcCGhou-I^ZM}_Qs$klh5T7tK`=57>oGtYk3tytOLr-a)N5{B-^xxkG~5ZJZS&eDq2 zn6WCVL6|HGrG%qGBE?!-dr{p9W{`&4rF|iPy!T#;jtQZY$&@K5@C|D+9>wtyXx{E9?a-Q9|&eMrQ2Qe@jl+#*)rphDuy?ak&{q+m`_zC$j*V%BIb^YnPDinQ^2ZQI1>hqot?EJ&Bx8^nx- z=?(Ml>a#g`_ZJD=59H1iXxe{BhW?HbG7#t#V!NMc7%~>3hS(I@$DCK4jH@7(HPj7uZyu}*!pK_uBfr3tp&K{DTM!%60w z^&H?WGR0Sz1)dR3-8H3J*Y(bRR!07?q5lj$x9YhOcpvFDFX5Zj%snm*c)bElg}Jlr zs*A8s;lI>ApaZQoC*W>SDB^kg6~O|xi;j*So;jXgR+g4bB;k$=d2|&5Q} zt1Y5>GZat?)XF?lnlsdjGaNEfxFPDO+IpoPQfb?-L)fl(u2jVX7`r%7l_cL=YSF;a zK(HB>s7ysC%1yib`fZgE-PRS*PBW)fy2h$)r#n_1okJmRK6_@9Cf&h&k=b1M*O9yq zyXp85F7mEK^WGat1A<88l+x*&IwM6du@@Es_}O>Qve&GQ?tcHFPMVXz*jQ-;fiawO1$6GN`37?16|+mG98+WCi{8h3IlbVn`AYybyC!Ki!SB1 z*yR^c>voR^x>0I{QOy3TK>!wPUwchyVL6qOHL-$HV)zVjA4x`c7cam%UT!@#jpCm3}kgHjd=?e#{af-^?xv@tkJaCk|P$@V)sJxzkwfRj)Tp)z8zmp@rX5MYYfHxNUtprB}#s zg{wB9>@V{mU)AZA9$%b!X4?J3~RFC9onzu}9lxby2;WFTPH_)}{%IaIHVn;(d-X9ORO=` zBn{s^`_}fHhV8PtfUl#|aQ!#K=Ux)5?D{ol2EqdNuC*OZ+L2Rn#R&xh#(W+v-@K;+ znINF&9{pMdTPj2oG2X8$H?jn0!_W$-={6|Ob z<)Fses(!qs-$4_#xfa70N9pL7YJVNzR7N}YhsF4$c!HO`Z-V*8QszXN{vQujN`Rm{ zT`vQkeWD9AhP=bzdvFg5Wwhfx?c`uG4mBTHFonsnR{54M6ji-x_bV4&FioQ&a`bmbzOU(f1$ogK9{nqd{ico3 z<=Jjd@Gk1IE^Mm^r*+w9d3k0#FqbrHnj09^r(H4I%GHbhxqy4vRys8MgRB^4Q9$k- z&Ys_2a|}M8GbMf~7_3YpEAF=RD6l1YChinykJ^i+C`VE}y__gE3FQilWBE;8q(!Wx zrI$6!N?G)VrV4SY1fkKuao(el&VI4C%17FF1a5+Q>6R6s+-4!#=F@Fc;?hCg84f~a zm!2|e6M>Y54i0uanV=tRh~1axMD7hqADf{E9M?N zB0wpUE{TUM%f8?8Cs1bCUM`m+2C@{_z^sxCF#S+Zkoxw%gY`-azBw{u$=tGdFke~ zny^TqA&z`7xw+mtyIH9Qy`CB9$G9^oG7L~(X@7IeelsSQoIRc&D6yhEEehZwvc-h0 zzk1_0OTN83J7W0qDnq&F&mGt9d?Pd7NsJ)J$cfdT4SzB=qsiBM?$4mDc=TK3@~7_# zzU`hW=-ixlWIm~&aJ2}ZZ2Co~l=SB3V@30^+zs67=z4i?f4~!K+a_hZyio_jA9two zE&;dpaFkz>=68&bzDh6P(!>?hlY^^=?F}`0Z{2Ba(+j54Ha*At448DcmKVy&I{5y9 z=rVJ&H_k-GEyXW3Ukxg~JI%ax^u&heTFaJwpF%<;A1}T5EsR%4f90*JA2eRV_!-bK zt3{$}vHW%SzE#nW-BILJTxgdYH_x5G!TxueBIFbU=fGj6w-~Tv00Z$FKpuJ&5FB0s z-@$}lEszE#>K5yO#$zYH0Wbh7s0~0cXm~dQ&%r^6z}*5Yf(f7%ND%}B{2UNV4>|%r zjvc~D5|9Au3=*&g7Q~T(yyNB)6yVZH&~e%UWI;aO0WO0a+X2)-^6diJAl-M5#;+qb z|DzGV{?42K!;*iv`wumK1A1V6)^9)#X<9HnjjB;lUw*I0FulFiW!=aZm{4EdYVA9Z$UfU4{tNhXD9e3FBa=1j5h1 zWjZ&E7y30_9tL{p7BF6zc_ToGXaso9>tUe)8w4Dj>5m3yX5Bs{fm(N@_>MMU{cqo6 zo=9(pp^gtwFBNTcM-T$}EeM5h{i}vd0H82Y@Bre_qb(x{x1g}&NAU(Ff{*}(p+L71 zlv{)WC`{pWRIj#nUU-U88NnONqECZj3rC$>jqdanC<{yINK(2hjV(wZ8=$fzOUQ%s&jD*&AA zQlj8)FMG0AVBp#(P+6$$W(eZhBy&v=orj~rJf6r7J=NfUD?^E(82{}S)RhDhV;g{8 z_=I3@A%RnjLIP4?p$-Z7!ayPx2K1bg-3VZV7R)ST022TtiYb8iX{j&`P$i=)CZ{){ z9Su;4rG-Eiu$x%`7m8T{e*Afl`O3Q3v$_xxl!~G9`BS62=YxvI&pxoU@bPeeS05Iv zJ@jS^-*n3`oU->5q)FKo@2oIO%X z$nRe;lo}k0_Ky@@kXo&Lsuv(Bn;D~Zfdhv;?(|DA=}$nax_6>pFE`^ELSU||n`_2S8hWkAWPU~3GH+eVr>1+$udBi^ zm+Zlh>*$JT5g9wos~&VkL8n`+i7-Exi6y7YkY%KthjR_t8C7`&e_1w_0(VZtJ)Ir?Hou z1vn3LG{UWHJlrVzx$NuTmqdtY6`9>AL>a0_r!$@4!dl2^LsllkP2*BLyLEK=?+uy2W-mm=C{Nr% zjNUf9m4L=hsJKW|<*P84Q;#5a=A6)$Jlx1%0*`9Z>rB_Z%p9a8I`C)l2X)rQy%~mE zMscA#<0$B6326>W!(VovX3?rvctKyOHJj<{@>(yV;~jPERvx22>s<3r6{BMTri0y;_#B73%-kZHQX+21+`WbEtVtl{kSqOtsCXxql@E! zUGi+3S2>U33Pch*-q87FK)25w!;Q1^&x@H8Q=nG910BI|RXg(0v4xA##=7w*NwsDd z76z6!2qXc>vV!W4FhSw##-8gHmqtGjsI<|ZP>5}XD?bHusS?_fm#N!J0?I*R(U%BB zp+BL?TbNIPs#RYa&Esm8be0tS1n!{puT){Vip z&PR|ZT}oUY%vYaDYBUq<>Ub?(pV16zqWA(@_%OMpUy6C@#Zq+1M=dm6HMf3C?W>9u za+4zXy0R8WZ;+3F8B$==FLI2d%j}}czK5F>&6ZzEc&1sN|Fls;qLFOc?7bF?BQL=T zfg98;Vpe}xJctmI?j!{$Al4$twxNxS9RjOlj~NV}B@AB{PhlYNJ^8y$B0r@00G0hd zypnl#Co z5hfyZt@jD%y#nh;@_qMt4@6-GIFu!eMkm%Yl#5!neo7h8hY(C>C zHgmo1Pf(<|eL#i}ofBHKC?617c2ksJ%`zedv)z67^7$cOOWJK{|EjE9l}7n_oe5LV zm9OLM9jf^G#*RWcaeq_0^nr6#33;I}6kEsSI;zm{7qxif+-RE;#&gNC-cOmt?L~j_ zYI~HC8}m+kS{+&XI}|-kJe!HC0%&4x$I85D$)dR1l-JfEh^bVWCy23?^=1%SayZ(u zr9U#gj&jgnGUHhA?^T_mA`?)WT=p(&V@^I8aSFv%vuYRzxD2(;xIku0XT_XEc!N+~ zjJr^+8|vFde6@4%!BXbsq@`EOA=VhD`24QGBC5V`yy3b-rhp1wEfOWbRuSiz{kEyy z`U>4|0m|=kS{qo^$?p~P^uI(r7Z)BhQ`Kj_&lKpGM8u)p%E^PmyOiyqZ5PykPv5!*J9ZEsgfg$tLMl#+ib^$O8si2W*ar@7AYjoN8u6l zYSG*H5z_FI`rEj+uQ9Vh^bx6*i%P5T>oG4xg5~wdBp=^HZtqf|>Jhr^bdySC%S9O% z%h%47Qm9nwi#pUbhhSfA|MK31`)2WLWKCl?n}P+U%Ra{0%_#WSb%X#|3sm2X?VDv|s__X=(n9f5MsbeLNEiz($VPaBN#wAQAHZR{PrnKhl- zq`|4Huiy1af4h5Y2DRg*H2M1T^OsXog1X8kE?f6S?pRkk-407lGw*$yIx!a0-`L1k z=<_UlP2#;7GH7E$cyB^oQl|b2yBEh^VCqA)VMLOf{WiztF=3u-b?C@qcGvEzJ>4D_ zo}tG|Cm$LB`l*Zs%{_TFBQZ zPERaI`6>oi4iumq8Zf}H|JIL2r`LXxKU_4l@72;~Ufa8dx|OZYfWz9E1;O%(~Ean$BoT#87U1$+_8BpCx2E+u&}s?Dyn-c_yFA zMYSLA3uc2#&*j#qf6^g0Jb%@PGo2)~Qq?1aa39FIkWKdE<_q`uak=#P?46(>yi|LG zRHngn+or7l%oODV1G+*+_E8hQQuVN(!_$PyDeBc^Us+Tw)#xLI1x2BzH;grMll2X2 zohIV%9PA(7d(SgNyAka!+;>Ddo%rZ;e`ERP?$XOlfg{%&a_KRo#M%1c&(k6Hb6$yi zRo^a3)lXnD$3!JGN3f<}M2iqNSpm_{&IS4-p&t*lMtyaH9{R?GTUu7GP})RO-t`Vn zE6KpAmXXe*dLPP=rQoPEUcPKW^{({sjt^Fs*JSgSRCFFx7GQ{B;_3UwVSmjzgt%zk z@pI5lvAFSd%recOuB5Jdb>S{UXl_;*vu8h8}JpH!s-}4g))nti|Ep|o1@L_ zugjER_%l*3ChM|GMx4bB-h>48DJ}BC{d#;J#1;KKhg#I8lg2QG!z1(_ix`^Kmc^ho z(*hW6)?$CgchH>=wL(AbtRm0AAjj09V;mpKM<*rjFs=8dn*z63>F??PvYNTN*h@6b z>N~dF*_I)NxYcOlD$KsY*^idnCCj~C&DsTT8P0B>xs$dQybycQUyj8lona5of*4Ls zAnz|U8$V9k=9(Ub>-Tzr?p9$m4pHR(`%UpZO(Pg4XXI^M&(zwUE?_QrA8KT zt=}}eIDMWwi)W->Z+v1z$$K5|KwlTwX_^{1;hDumoS=O%aqVgx= zTfBayA@L|`%=!!QZ3dlqrbD#o?fzI)^)U;fFaqvo&T!7Q=f2cNWP?QerbYa%<4NLe z{XYAmlJp3)RZGY)jN1+yJ4*L@DJ$2apdIBf_*DbCt!dM5Eq7hwftc6a@BDS~BC~Ui zXR`9Wr94wre4*WLjAiwRYL%rU24X3J*aZE*whEh442XcPrm+}sp$3V-J3s+?La_E# zz;`gATMax16Zk1SPaC+!3BAa?HqS3#sb0B(TjbO2a`Sa$&Efk<`;Sb=DN z_|JPv4*|XZ@p!-yAgv7AzEf-ZXQTOVz;MDa#Q?;`&o|J?!}oT;y-TKsP=FZ%T3N~y zD~t6z0=R(s;uL=v6E^n1!3xGg4|Jw{Cyx31i0O)(M$0tIlEtcyT z5IWVUWVBn`pJ)_LG+h7EXki_X0dY_he|(~u#FiWb;2**EgJCL`_)nO^2;+jTq+Emv zoc5bG#ApV~IypG7=YCR`fcngm_-u- xY%USt6#w@Zq&HcTwrck{xw*mryEzhT0>Dmh{unqJj}My;z$D3SNhb#({{cxsZm9qO diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 4218552c9aa..31b10401c8c 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -931,6 +931,10 @@ class Website extends CommonObject $stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_small, "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__", $stringtoexport); $stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_mini, "file=logos%2Fthumbs%2F__LOGO_MINI_KEY__", $stringtoexport); $stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo, "file=logos%2Fthumbs%2F__LOGO_KEY__", $stringtoexport); + + // When we have a link src="image/websiteref/file.png" into html content + $stringtoexport = str_replace('="image/'.$website->ref.'/', '="image/__WEBSITE_KEY__/', $stringtoexport); + $line.= "'".$this->db->escape($stringtoexport)."'"; // Replace \r \n to have record on 1 line $line.= ");"; $line.= "\n"; From f37b8c78c86783ed7e16dbbaa213fdf3cd3cb56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 15:18:09 +0200 Subject: [PATCH 517/798] NEW Add POST /bankaccounts/transfer REST API endpoint. This allow internal transfers between two bankaccounts. --- .../bank/class/api_bankaccounts.class.php | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/htdocs/compta/bank/class/api_bankaccounts.class.php b/htdocs/compta/bank/class/api_bankaccounts.class.php index 72ba4c82db1..8103d6b0b4f 100644 --- a/htdocs/compta/bank/class/api_bankaccounts.class.php +++ b/htdocs/compta/bank/class/api_bankaccounts.class.php @@ -23,6 +23,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; /** * API class for accounts * + * @property DoliDB db * @access protected * @class DolibarrApiAccess {@requires user,external} */ @@ -166,6 +167,140 @@ class BankAccounts extends DolibarrApi return $account->id; } + /** + * Create an internal wire transfer between two bank accounts + * + * @param int $bankaccount_from_id BankAccount ID to use as the source of the internal wire transfer {@from body}{@required true} + * @param int $bankaccount_to_id BankAccount ID to use as the destination of the internal wire transfer {@from body}{@required true} + * @param string $date Date of the internal wire transfer (UNIX timestamp) {@from body}{@required true}{@type timestamp} + * @param string $description Description of the internal wire transfer {@from body}{@required true} + * @param float $amount Amount to transfer from the source to the destination BankAccount {@from body}{@required true} + * @param float $amount_to Amount to transfer to the destination BankAccount (only when accounts does not share the same currency) {@from body}{@required false} + * + * @url POST /transfer + * + * @return array + * + * @status 201 + * + * @throws 401 Unauthorized: User does not have permission to configure bank accounts + * @throws 422 Unprocessable Entity: Refer to detailed exception message for the cause + */ + public function transfer($bankaccount_from_id = 0, $bankaccount_to_id = 0, $date = null, $description = "", $amount = 0.0, $amount_to = 0.0) + { + if (! DolibarrApiAccess::$user->rights->banque->configurer) { + throw new RestException(401); + } + + if ($bankaccount_from_id === $bankaccount_to_id) { + throw new RestException(422, 'bankaccount_from_id and bankaccount_to_id must be different !'); + } + + require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + + $accountfrom = new Account($this->db); + $resultAccountFrom = $accountfrom->fetch($bankaccount_from_id); + + if ($resultAccountFrom === 0) { + throw new RestException(404, 'The BankAccount for bankaccount_from_id provided does not exist.'); + } + + $accountto = new Account($this->db); + $resultAccountTo = $accountto->fetch($bankaccount_to_id); + + if ($resultAccountTo === 0) { + throw new RestException(404, 'The BankAccount for bankaccount_to_id provided does not exist.'); + } + + if ($accountto->currency_code == $accountfrom->currency_code) + { + $amount_to = $amount; + } + else + { + if (!$amount_to || empty($amount_to)) + { + throw new RestException(422, 'You must provide amount_to value since bankaccount_from and bankaccount_to does not share the same currency.'); + } + } + + $this->db->begin(); + + $error = 0; + $bank_line_id_from = 0; + $bank_line_id_to = 0; + $result = 0; + $user = DolibarrApiAccess::$user; + + // By default, electronic transfert from bank to bank + $typefrom='PRE'; + $typeto='VIR'; + + if ($accountto->courant == Account::TYPE_CASH || $accountfrom->courant == Account::TYPE_CASH) + { + // This is transfer of change + $typefrom='LIQ'; + $typeto='LIQ'; + } + + /** + * Creating bank line records + */ + + if (!$error) { + $bank_line_id_from = $accountfrom->addline($date, $typefrom, $description, -1*price2num($amount), '', '', $user); + } + if (!($bank_line_id_from > 0)) { + $error++; + } + + if (!$error) { + $bank_line_id_to = $accountto->addline($date, $typeto, $description, price2num($amount_to), '', '', $user); + } + if (!($bank_line_id_to > 0)) { + $error++; + } + + /** + * Creating links between bank line record and its source + */ + + $url = DOL_URL_ROOT.'/compta/bank/line.php?rowid='; + $label = '(banktransfert)'; + $type = 'banktransfert'; + + if (!$error) { + $result = $accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, $url, $label, $type); + } + if (!($result > 0)) { + $error++; + } + + if (!$error) { + $result = $accountto->add_url_line($bank_line_id_to, $bank_line_id_from, $url, $label, $type); + } + if (!($result > 0)) { + $error++; + } + + if (! $error) + { + $this->db->commit(); + + return array( + 'success' => array( + 'code' => 201, + 'message' => 'Internal wire transfer created successfully.' + ) + ); + } + else + { + $this->db->rollback(); + throw new RestException(500, $accountfrom->error.' '.$accountto->error); + } + } + /** * Update account * From 6edf5494c3aa70dd942c59c977f30c44daf5d783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 15:29:37 +0200 Subject: [PATCH 518/798] Added @throws annotations for possible exceptions --- htdocs/compta/bank/class/api_bankaccounts.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/bank/class/api_bankaccounts.class.php b/htdocs/compta/bank/class/api_bankaccounts.class.php index 8103d6b0b4f..ba21b6c09c1 100644 --- a/htdocs/compta/bank/class/api_bankaccounts.class.php +++ b/htdocs/compta/bank/class/api_bankaccounts.class.php @@ -184,7 +184,9 @@ class BankAccounts extends DolibarrApi * @status 201 * * @throws 401 Unauthorized: User does not have permission to configure bank accounts + * @throws 404 Not Found: Either the source or the destination bankaccount for the provided id does not exist * @throws 422 Unprocessable Entity: Refer to detailed exception message for the cause + * @throws 500 Internal Server Error: Error(s) returned by the RDBMS */ public function transfer($bankaccount_from_id = 0, $bankaccount_to_id = 0, $date = null, $description = "", $amount = 0.0, $amount_to = 0.0) { @@ -283,7 +285,7 @@ class BankAccounts extends DolibarrApi $error++; } - if (! $error) + if (!$error) { $this->db->commit(); From 08f99b42724cc1e78364bcb352bfd15810102664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 15:39:49 +0200 Subject: [PATCH 519/798] Fix codestyle lessc.class.php should be excluded from ruleset as it is an external lib --- dev/setup/codesniffer/ruleset.xml | 1 + htdocs/core/lib/files.lib.php | 2 +- htdocs/core/lib/website.lib.php | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index daf73e5b2a7..89ea98a051b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -6,6 +6,7 @@ build/html build/aps documents + htdocs/core/class/lessc.class.php htdocs/custom htdocs/includes htdocs/install/doctemplates/websites diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 79b0badf0ff..a5bbd68a736 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1911,7 +1911,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE)!==true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4696e2adc8f..bc1e08353cb 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -33,7 +33,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html') { $nbrep = 0; @@ -191,7 +191,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context. */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From 107e6be6d93ad7afe729079c64ef7b47fa9c17aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Thu, 15 Aug 2019 15:40:55 +0200 Subject: [PATCH 520/798] Fix code style issue. --- 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 716cf891084..456580124d8 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -34,7 +34,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html', $containerid='') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html', $containerid = '') { $nbrep = 0; From a66560ee935cf97e3e6cbd82db811da9ffd88685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Thu, 15 Aug 2019 16:22:02 +0200 Subject: [PATCH 521/798] Update ruleset.xml --- dev/setup/codesniffer/ruleset.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index daf73e5b2a7..89ea98a051b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -6,6 +6,7 @@ build/html build/aps documents + htdocs/core/class/lessc.class.php htdocs/custom htdocs/includes htdocs/install/doctemplates/websites From fd8cbd9a938ac7e3882fd59392c35de183c3c1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Thu, 15 Aug 2019 16:23:01 +0200 Subject: [PATCH 522/798] Update files.lib.php --- 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 79b0badf0ff..a5bbd68a736 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1911,7 +1911,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE)!==true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; From 46ceb1168535eb55547aa9d255c82b112283ed04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 16:58:36 +0200 Subject: [PATCH 523/798] Replace special chars in name of website page --- htdocs/website/index.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index d16e8661390..97bcdecc0af 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3073,7 +3073,10 @@ if ($action == 'editmeta' || $action == 'createcontainer') jQuery("#WEBSITE_TITLE").keyup(function() { if (disableautofillofalias == 0) { - var valnospecial = jQuery("#WEBSITE_TITLE").val().replace(/[^\w]/gi, \'-\').toLowerCase(); + var valnospecial = jQuery("#WEBSITE_TITLE").val(); + valnospecial = valnospecial.replace(/[éèê]/g, \'e\').replace(/[à]/g, \'a\').replace(/[ù]/g, \'u\').replace(/[î]/g, \'i\'); + valnospecial = valnospecial.replace(/[ç]/g, \'c\').replace(/[ö]/g, \'o\'); + valnospecial = valnospecial.replace(/[^\w]/gi, \'-\').toLowerCase(); valnospecial = valnospecial.replace(/\-+/g, \'-\').replace(/\-$/, \'\'); console.log("disableautofillofalias=0 so we replace WEBSITE_TITLE with "+valnospecial); jQuery("#WEBSITE_PAGENAME").val(valnospecial); From b5d72edebc0cdfc74c8948129c06734bd3e251ff Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:07:36 +0200 Subject: [PATCH 524/798] Can add more samples of pages. Add an exemple of page with dynamic content. --- htdocs/core/class/html.formwebsite.class.php | 16 +- htdocs/core/lib/website.lib.php | 269 +++++++++--------- htdocs/langs/en_US/website.lang | 5 +- htdocs/website/index.php | 2 +- .../samples/page-sample-corporatehome.html | 15 - .../samples/page-sample-dynamiccontent.html | 44 +++ htdocs/website/samples/page-sample-empty.html | 6 +- 7 files changed, 207 insertions(+), 150 deletions(-) delete mode 100644 htdocs/website/samples/page-sample-corporatehome.html create mode 100644 htdocs/website/samples/page-sample-dynamiccontent.html diff --git a/htdocs/core/class/html.formwebsite.class.php b/htdocs/core/class/html.formwebsite.class.php index 3cefeaef99c..42c3b36025b 100644 --- a/htdocs/core/class/html.formwebsite.class.php +++ b/htdocs/core/class/html.formwebsite.class.php @@ -176,7 +176,21 @@ class FormWebsite $langs->load("admin"); - $arrayofsamples=array('empty'=>'EmptyPage', 'corporatehome'=>'CorporateHomePage'); + $listofsamples = dol_dir_list(DOL_DOCUMENT_ROOT.'/website/samples', 'files', 0, '^page-sample-.*\.html$'); + + $arrayofsamples = array(); + $arrayofsamples['empty']='EmptyPage'; // Always this one first + foreach($listofsamples as $sample) + { + $reg = array(); + if (preg_match('/^page-sample-(.*)\.html$/', $sample['name'], $reg)) + { + $key = $reg[1]; + $labelkey = ucfirst($key); + if ($key == 'empty') $labelkey = 'EmptyPage'; + $arrayofsamples[$key] = $labelkey; + } + } $out = ''; $out .= '
'; print $langs->trans('WEBSITE_PAGE_EXAMPLE'); print ''; - print $formwebsite->selectSampleOfContainer('sample', (GETPOST('sample', 'alpha')?GETPOST('sample', 'alpha'):'corporatehomepage')); + print $formwebsite->selectSampleOfContainer('sample', (GETPOSTISSET('sample')?GETPOST('sample', 'alpha'):'empty')); print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'; // Show filemanager tree (will be filled by a call of ajax /ecm/tpl/enablefiletreeajax.tpl.php, later, that executes ajaxdirtree.php) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 880978a13e5..1775ab266bb 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -705,6 +705,7 @@ DateOfSignature=Date of signature HidePassword=Show command with password hidden UnHidePassword=Show real command with clear password Root=Root +RootOfMedias=Root of public medias (/medias) Informations=Information Page=Page Notes=Notes From 7580efbd4ebbe9b2a2c4a19643e228c854cebba8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 04:32:06 +0200 Subject: [PATCH 549/798] Fix link replacement --- htdocs/core/lib/website.lib.php | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 9805801b4b5..e7f86a153d7 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -153,6 +153,10 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Protect the link styles.css.php to any replacement that we make after. $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); + $content = str_replace('href="http', 'href="!~!~!~http', $content); + $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); + $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Replace relative link '/' with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); @@ -167,9 +171,9 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // ]*src=")(medias\/)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + $content = preg_replace('/(]*src=")\/?medias\//', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); // ]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT, '/').'\/viewimage))/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + $content = preg_replace('/(]*src=")\/?([^:\"\!]+)\"/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=\2"', $content, -1, $nbrep); // ]*src=")(\/?viewimage\.php)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content, -1, $nbrep); @@ -183,6 +187,8 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: ...href="/viewimage.php?modulepart=" $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1!~!~!~'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + // Fix relative URL + $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); @@ -230,6 +236,10 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') // Protect the link styles.css.php to any replacement that we make after. $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); + $content = str_replace('href="http', 'href="!~!~!~http', $content); + $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); + $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Replace relative link / with dolibarr URL: ...href="/"... $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'"', $content, -1, $nbrep); @@ -253,16 +263,19 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content = preg_replace('/url\((["\']?)medias\//', 'url(\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); $content = preg_replace('/data-slide-bg=(["\']?)medias\//', 'data-slide-bg=\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); - // ]*src=")(medias\/)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + // ]*src=")\/?medias\//', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); // ]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT, '/').'\/viewimage))/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + $content = preg_replace('/(]*src=")\/?([^:\"\!]+)\"/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=\2"', $content, -1, $nbrep); // ]*src=")(\/?viewimage\.php)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content, -1, $nbrep); // action="newpage.php" => action="dolibarr/website/index.php?website=...&pageref=newpage $content = preg_replace('/(action=")\/?([^:\"]*)(\.php\")/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep); + // Fix relative URL + $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); } @@ -277,7 +290,11 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $nbrep=0; if (! $symlinktomediaexists) { - $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); + // ]*src=")\/?image\//', '\1/wrapper.php?modulepart=medias&file=medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)\/?image\//', '\1/wrapper.php?modulepart=medias&file=medias/image/', $content, -1, $nbrep); + + $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); @@ -291,6 +308,10 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') } else { + // ]*src=")\/?image\//', '\1medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)\/?image\//', '\1medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); From d5ce7fbaaf6a279df750738a9aa20fe9d42ae5eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:01:54 +0200 Subject: [PATCH 550/798] Fix links --- htdocs/core/lib/website.lib.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index e7f86a153d7..455d28c84e8 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -155,8 +155,12 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); $content = str_replace('href="http', 'href="!~!~!~http', $content); $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="/document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="'.DOL_URL_ROOT.'/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Replace relative link '/' with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); @@ -189,6 +193,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Fix relative URL $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="!~!~!~/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); @@ -238,8 +243,12 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); $content = str_replace('href="http', 'href="!~!~!~http', $content); $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="/document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="'.DOL_URL_ROOT.'/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Replace relative link / with dolibarr URL: ...href="/"... $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'"', $content, -1, $nbrep); @@ -276,6 +285,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') // Fix relative URL $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="!~!~!~/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); } @@ -313,6 +323,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content=preg_replace('/(url\(["\']?)\/?image\//', '\1medias/image/', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); From 9a455cf1d6089392a2613241d720332799b0b472 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:03:48 +0200 Subject: [PATCH 551/798] Fix link --- htdocs/core/lib/website.lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 455d28c84e8..e4db83140cd 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -305,6 +305,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content=preg_replace('/(url\(["\']?)\/?image\//', '\1/wrapper.php?modulepart=medias&file=medias/image/', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); From 62438b61f04873f9a0fc3e1105c8eab0aa4b20bd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:14:20 +0200 Subject: [PATCH 552/798] Better error message --- 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 c7573af557a..5d408f3bdd2 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2927,7 +2927,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, { if (empty($conf->$modulepart->dir_output)) // modulepart not supported { - dol_print_error('', 'Error call dol_check_secure_access_document with not supported value for modulepart parameter ('.$modulepart.')'); + dol_print_error('', 'Error call dol_check_secure_access_document with not supported value for modulepart parameter ('.$modulepart.'). The module for this modulepart value may not be activated.'); exit; } From 63520e1d9b08e4431388e62ad2ebcaa65cdb0c22 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:32:24 +0200 Subject: [PATCH 553/798] Fix link --- htdocs/core/lib/website.lib.php | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index e4db83140cd..13dcd9499ed 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -316,25 +316,33 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)hashp=([^\)]*)(["\']?\))/', '\1/wrapper.php\2hashp\3\4', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=mycompany([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=mycompany\3file=\4\5', $content, -1, $nbrep); + + // If some links to documents or viewimage remains, we replace with wrapper + $content=preg_replace('/(]*src=")\/?viewimage\.php/', '\1/wrapper.php', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")\/?documents\.php/', '\1/wrapper.php', $content, -1, $nbrep); } else { // ]*src=")\/?image\//', '\1medias/image/', $content, -1, $nbrep); - $content=preg_replace('/(url\(["\']?)\/?image\//', '\1medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")\/?image\//', '\1/medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)\/?image\//', '\1/medias/image/', $content, -1, $nbrep); - $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/', '\1medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/', '\1/medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)hashp=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2hashp=\3\4', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)hashp=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2hashp=\3\4', $content, -1, $nbrep); $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)hashp=([^\)]*)(["\']?\))/', '\1/wrapper.php\2hashp=\3\4', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=mycompany([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=mycompany\3file=\4\5', $content, -1, $nbrep); + + // If some links to documents or viewimage remains, we replace with wrapper + $content=preg_replace('/(]*src=")\/?viewimage\.php/', '\1/wrapper.php', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")\/?documents\.php/', '\1/wrapper.php', $content, -1, $nbrep); } } From 318b27e0848e2df018feb19e0fdd32722b81b178 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:33:45 +0200 Subject: [PATCH 554/798] Fix link --- 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 13dcd9499ed..74c06201507 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -342,7 +342,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') // If some links to documents or viewimage remains, we replace with wrapper $content=preg_replace('/(]*src=")\/?viewimage\.php/', '\1/wrapper.php', $content, -1, $nbrep); - $content=preg_replace('/(]*href=")\/?documents\.php/', '\1/wrapper.php', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")\/?document\.php/', '\1/wrapper.php', $content, -1, $nbrep); } } From 1f2eb31e41cb7e0f145b8e1b4cdc569d7827d9f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:06:36 +0200 Subject: [PATCH 555/798] Set utf-8 in lowercase --- htdocs/core/lib/website2.lib.php | 2 +- htdocs/main.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index 357c050afd5..1d4f1fdb37f 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -113,7 +113,7 @@ function dolSavePageContent($filetpl, $object, $objectpage) $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''.dol_string_nohtmltag($objectpage->title, 0, 'UTF-8').''."\n"; - $tplcontent.= ''."\n"; + $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 58fe4008a28..7c11e6d10a7 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1217,7 +1217,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr if (GETPOST('dol_basehref', 'alpha')) print ''."\n"; // Displays meta - print ''."\n"; + print ''."\n"; print ''."\n"; // Do not index print ''."\n"; // Scale for mobile device print ''."\n"; From e61f883561a3d1b9a823e408d3d48ef906f8a53e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:25:58 +0200 Subject: [PATCH 556/798] Color --- htdocs/theme/eldy/theme_vars.inc.php | 2 +- htdocs/theme/md/theme_vars.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 6b8ac64a2ec..652ece12837 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,7 +32,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index b200746c330..0800f92b74b 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -28,7 +28,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') From 23b1c24bf7fb049b8c611d1ef357dfa54c9db001 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:28:25 +0200 Subject: [PATCH 557/798] Fix template --- .../websites/website_template-stellar.zip | Bin 197324 -> 191327 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip index 728b9f37b35f955bb766cc70df8c494c6a434834..b4d55a83e7314ffbc3a3deb243081f17395ff972 100644 GIT binary patch delta 20286 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 delta 26552 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 From b8cc00eb66a37cc841b99826d4f73673028942bb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:41:07 +0200 Subject: [PATCH 558/798] Colors for graph are same by defaul than flashy, but less flashy. --- htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- htdocs/theme/md/theme_vars.inc.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 652ece12837..2120a2e4793 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,12 +32,12 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250, 190, 30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); } else { diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 0800f92b74b..ebc085e5279 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -28,12 +28,12 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); } else { From 63e590810b94c65f1d492ef0c2d228c23a521c71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:51:32 +0200 Subject: [PATCH 559/798] Still too agressive --- htdocs/theme/eldy/theme_vars.inc.php | 2 +- htdocs/theme/md/theme_vars.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 2120a2e4793..2f0d0d8a692 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,7 +32,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index ebc085e5279..5daaf7c08cc 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -28,7 +28,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') From d850b8a2624744bd2330c60d55b1c6050bf3e2bc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 07:02:10 +0200 Subject: [PATCH 560/798] More neutral color --- htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 2f0d0d8a692..cbf1ab000be 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -51,9 +51,9 @@ $theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC')); // Colors $colorbackhmenu1='60,70,100'; // topmenu -$colorbackvmenu1='249,250,252'; // vmenu +$colorbackvmenu1='250,250,250'; // vmenu $colortopbordertitle1='200,200,200'; // top border of title -$colorbacktitle1='233,234,238'; // title of tables,list +$colorbacktitle1='233,234,237'; // title of tables,list $colorbacktabcard1='255,255,255'; // card $colorbacktabactive='234,234,234'; $colorbacklineimpair1='255,255,255'; // line impair From e0310b5d9ba5aee2c9f25730f350ca6bfef67598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Fri, 16 Aug 2019 11:38:42 +0200 Subject: [PATCH 561/798] Fix #11682 Missing origin object ref and thirdparty ref in future bank entries --- 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 f17e622210e..f9231f4f247 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -267,9 +267,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $parameters = array('obj' => $obj); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ - $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : ''; - $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : ''; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : 0; + $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; + $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; + $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; } $total_ttc = $obj->total_ttc; From 13604b3571bd6febe92b8541bb88d51f59b29fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Fri, 16 Aug 2019 11:55:40 +0200 Subject: [PATCH 562/798] Fix code style / CI. --- htdocs/admin/pdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'; - print $langs->trans('Label') . ': '; + print $langs->trans('Label') . ': '; print '' . dol_print_date(dol_now(), "dayhour", "tzuser") . ''; print img_picto('', 'object_globe').' '; print ''; - print $link->label; + print dol_escape_htmltag($link->label); print ''; print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'; print ''; print ""; -print '"; +print '"; print ""; print ""; -print ''; +print ''; print ''; $production_mode=(empty($conf->global->API_PRODUCTION_MODE)?false:true); if ($production_mode) { - print ''; } else { - print ''; } print ''; print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + print '
".$langs->trans("Parameter")."'.$langs->trans("Value")."'.$langs->trans("Value")." 
'.$langs->trans("ApiProductionMode").''; + print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; + print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ' 
'.$langs->trans("RestrictApiToIps").''; +print '
'; print '

'; +print ''; + + // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 9d42b9995f6..1f1235571cc 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -206,6 +206,21 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || // Call one APIs or one definition of an API if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $reg[2] != '/resources.json' && preg_match('/^\/(swagger|resources)\.json\/(.+)$/', $reg[2], $regbis) && $regbis[2] != 'root'))) { + // Restrict API to some IPs + if (! empty($conf->global->API_RESTICT_ON_IP)) + { + $allowedip=explode(' ', $conf->global->API_RESTICT_ON_IP); + $ipremote = getUserRemoteIP(); + if (! in_array($ipremote, $allowedip)) + { + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTICT_ON_IP); + print 'API not allowed from the IP '.$ipremote; + header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); + //print $conf->global->API_RESTICT_ON_IP; + exit(0); + } + } + $module = $reg[1]; if ($module == 'explorer') // If we call page to explore details of a service { diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index d408cddc5c8..c95c9fe05cc 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,3 +1932,4 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined +RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. \ No newline at end of file From d21e5571007d2052a6b5f80a67b6f4cac693584a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:41:53 +0200 Subject: [PATCH 578/798] FIX #11671 CVE-2019-15062 --- htdocs/core/actions_linkedfiles.inc.php | 8 +++----- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/user/card.php | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 25ef74127bf..463795b66e9 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -125,8 +125,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $link = new Link($db); - $link->id = $linkid; - $link->fetch(); + $link->fetch($linkid); $res = $link->delete($user); $langs->load('link'); @@ -160,8 +159,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $langs->load('link'); $link = new Link($db); - $link->id = GETPOST('linkid', 'int'); - $f = $link->fetch(); + $f = $link->fetch(GETPOST('linkid', 'int')); if ($f) { $link->url = GETPOST('link', 'alpha'); @@ -169,7 +167,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l { $link->url = 'http://' . $link->url; } - $link->label = GETPOST('label', 'alpha'); + $link->label = GETPOST('label', 'alphanohtml'); $res = $link->update($user); if (!$res) { diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 679989a75a0..05708691fab 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1758,7 +1758,7 @@ class FormFile print $langs->trans('Link') . ': '; print '
'; - print $langs->trans('Label') . ': '; + print $langs->trans('Label') . ': '; print '' . dol_print_date(dol_now(), "dayhour", "tzuser") . ''; print img_picto('', 'object_globe').' '; print ''; - print $link->label; + print dol_escape_htmltag($link->label); print ''; print ''; - print $langs->trans('Label') . ': '; + print $langs->trans('Label') . ': '; print '' . dol_print_date(dol_now(), "dayhour", "tzuser") . ''; print img_picto('', 'object_globe').' '; print ''; - print $link->label; + print dol_escape_htmltag($link->label); print ''; print '
'.img_object('', $delay['img']).'
'.img_object('', $delay['img']).''; print $bankaccount->getNomUrl(1); - if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; - else $other+=$objp->amount; + if ($cashcontrol->posmodule=="takepos"){ + if ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$cashcontrol->posnumber}==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$cashcontrol->posnumber}==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$cashcontrol->posnumber}==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } + else{ + if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } print "
'.$langs->trans("AccountancyJournal").''; - if ($object->fk_accountancy_journal > 0) { - $accountingjournal = new AccountingJournal($db); - $accountingjournal->fetch($object->fk_accountancy_journal); + if ($object->fk_accountancy_journal > 0) { + $accountingjournal = new AccountingJournal($db); + $accountingjournal->fetch($object->fk_accountancy_journal); - print $accountingjournal->getNomUrl(0, 1, 1, '', 1); - } + print $accountingjournal->getNomUrl(0, 1, 1, '', 1); + } print '
"; print ''; // TODO Replace this with mass delete action -print '
' . "\n"; -print '' . $langs->trans("DeleteMvt") . ''; -print '
'; - +if ($user->rights->mouvements->creer) +{ + print '
' . "\n"; + print '' . $langs->trans("DeleteMvt") . ''; + print '
'; +} print ''; From 4fd68798a3fb373669d4f61fc109f900d97e3313 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:38:51 +0200 Subject: [PATCH 597/798] Fix phpcs --- htdocs/core/lib/functions2.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 72bdce0f524..c22a8da5cee 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2345,10 +2345,10 @@ function colorLighten($hex, $percent) /** - * @param string $hex color in hex - * @param float $alpha 0 to 1 to add alpha channel - * @param bool $return Array set to 1 to return an array instead of string - * @return string|array String or array + * @param string $hex color in hex + * @param float $alpha 0 to 1 to add alpha channel + * @param bool $returnArray Array set to 1 to return an array instead of string + * @return string|array String or array */ function colorHexToRgb($hex, $alpha = false, $returnArray = false) { From f27bea94976c4a3719626b1ca3cac717e79caf89 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:39:02 +0200 Subject: [PATCH 598/798] Fix phpcs --- htdocs/compta/bank/class/account.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 5724178e9de..da136313393 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -749,7 +749,6 @@ class Account extends CommonObject $sql.= ",fk_pays = ".$this->country_id; $sql.= " WHERE rowid = ".$this->id; - $sql.= " AND entity = ".$conf->entity; dol_syslog(get_class($this)."::update", LOG_DEBUG); $result = $this->db->query($sql); From bbc1dfb0f7588e452548df03c84735f8dc42a88d Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 18 Aug 2019 09:33:02 +0200 Subject: [PATCH 599/798] Cashcontrol TakePOS fixes --- htdocs/compta/cashcontrol/cashcontrol_card.php | 15 +++------------ htdocs/compta/cashcontrol/report.php | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 378d6087cc7..1fa95eb0b46 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -88,7 +88,7 @@ if (empty($backtopage)) $backtopage = dol_buildpath('/compta/cashcontrol/cashcon $backurlforlist = dol_buildpath('/compta/cashcontrol/cashcontrol_list.php', 1); $triggermodname = 'CACHCONTROL_MODIFY'; // Name of trigger action code to execute when we modify record -if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH)) +if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) && empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH1)) { setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors'); } @@ -132,16 +132,7 @@ elseif ($action=="add") $error=0; foreach($arrayofpaymentmode as $key=>$val) { - if (GETPOST($key.'_amount', 'alpha') == '') - { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val)), null, 'errors'); - $action='start'; - $error++; - } - else - { - $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); - } + $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); } if (! $error) @@ -235,7 +226,7 @@ if ($action=="create" || $action=="start") $posmodule = GETPOST('posmodule', 'alpha'); $terminalid = GETPOST('posnumber', 'alpha'); $terminaltouse = $terminalid; - if ($terminaltouse == '1') $terminaltouse = ''; + if ($terminaltouse == '1' && $posmodule=='cashdesk') $terminaltouse = ''; // Calculate $initialbalanceforterminal for terminal 0 foreach($arrayofpaymentmode as $key => $val) diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 6584af5db98..ce0cdeed9fb 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -196,10 +196,18 @@ if ($resql) // Bank account print '
'; print $bankaccount->getNomUrl(1); - if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; - else $other+=$objp->amount; + if ($cashcontrol->posmodule=="takepos"){ + if ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$cashcontrol->posnumber}==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$cashcontrol->posnumber}==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$cashcontrol->posnumber}==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } + else{ + if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } print "
'; - $text=''; - if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')'; - else $text=$langs->transnoentitiesnoconv("NoItemLate"); - $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); - //$text.=$form->textwithpicto('',$langs->trans("LateDesc")); - $options='height="64px"'; - $boxwork.=showWeather($totallate, $text, $options); - $boxwork.='
'; print ''; print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; +for($i = 1; $i <= 12; $i++) +{ + print ''; +} +print ''; print ''; $sql = "SELECT bk.numero_compte AS 'compte',"; diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index f0a01d1ae04..efeffeb9b8c 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -130,21 +130,6 @@ $AccCat = new AccountancyCategory($db); * View */ -$months = array( - $langs->trans("JanuaryMin"), - $langs->trans("FebruaryMin"), - $langs->trans("MarchMin"), - $langs->trans("AprilMin"), - $langs->trans("MayMin"), - $langs->trans("JuneMin"), - $langs->trans("JulyMin"), - $langs->trans("AugustMin"), - $langs->trans("SeptemberMin"), - $langs->trans("OctoberMin"), - $langs->trans("NovemberMin"), - $langs->trans("DecemberMin"), -); - llxHeader(); $form=new Form($db); diff --git a/htdocs/compta/resultat/result.php b/htdocs/compta/resultat/result.php index 317531884c0..9bbf0501dbd 100644 --- a/htdocs/compta/resultat/result.php +++ b/htdocs/compta/resultat/result.php @@ -143,18 +143,18 @@ $AccCat = new AccountancyCategory($db); */ $months = array( - $langs->trans("JanuaryMin"), - $langs->trans("FebruaryMin"), - $langs->trans("MarchMin"), - $langs->trans("AprilMin"), - $langs->trans("MayMin"), - $langs->trans("JuneMin"), - $langs->trans("JulyMin"), - $langs->trans("AugustMin"), - $langs->trans("SeptemberMin"), - $langs->trans("OctoberMin"), - $langs->trans("NovemberMin"), - $langs->trans("DecemberMin"), + $langs->trans("MonthShort01"), + $langs->trans("MonthShort02"), + $langs->trans("MonthShort03"), + $langs->trans("MonthShort04"), + $langs->trans("MonthShort05"), + $langs->trans("MonthShort06"), + $langs->trans("MonthShort07"), + $langs->trans("MonthShort08"), + $langs->trans("MonthShort09"), + $langs->trans("MonthShort10"), + $langs->trans("MonthShort11"), + $langs->trans("MonthShort12"), ); llxheader('', $langs->trans('ReportInOut')); diff --git a/htdocs/projet/jsgantt_language.js.php b/htdocs/projet/jsgantt_language.js.php index 99123cc45ef..322b1c03c28 100644 --- a/htdocs/projet/jsgantt_language.js.php +++ b/htdocs/projet/jsgantt_language.js.php @@ -48,8 +48,8 @@ var vLangs={'getDefaultLang(1);?>': 'notes':'transnoentities('NotePublic'); ?>', 'january':'transnoentities('January'); ?>','february':'transnoentities('February'); ?>','march':'transnoentities('March'); ?>','april':'transnoentities('April'); ?>','maylong':'transnoentities('May'); ?>','june':'transnoentities('June'); ?>','july':'transnoentities('July'); ?>', 'august':'transnoentities('August'); ?>','september':'transnoentities('September'); ?>','october':'transnoentities('October'); ?>','november':'transnoentities('November'); ?>','december':'transnoentities('December'); ?>', - 'jan':'transnoentities('JanuaryMin'); ?>','feb':'transnoentities('FebruaryMin'); ?>','mar':'transnoentities('MarchMin'); ?>','apr':'transnoentities('AprilMin'); ?>','may':'transnoentities('MayMin'); ?>','jun':'transnoentities('JuneMin'); ?>','jul':'transnoentities('JulyMin'); ?>', - 'aug':'transnoentities('AugustMin'); ?>','sep':'transnoentities('SeptemberMin'); ?>','oct':'transnoentities('OctoberMin'); ?>','nov':'transnoentities('NovemberMin'); ?>','dec':'transnoentities('DecemberMin'); ?>', + 'jan':'transnoentities('MonthShort01'); ?>','feb':'transnoentities('MonthShort02'); ?>','mar':'transnoentities('MonthShort03'); ?>','apr':'transnoentities('MonthShort04'); ?>','may':'transnoentities('MonthShort05'); ?>','jun':'transnoentities('MonthShort06'); ?>','jul':'transnoentities('MonthShort07'); ?>', + 'aug':'transnoentities('MonthShort08'); ?>','sep':'transnoentities('MonthShort09'); ?>','oct':'transnoentities('MonthShort10'); ?>','nov':'transnoentities('MonthShort11'); ?>','dec':'transnoentities('MonthShort12'); ?>', 'sunday':'transnoentities('Sunday'); ?>','monday':'transnoentities('Monday'); ?>','tuesday':'transnoentities('Tuesday'); ?>','wednesday':'transnoentities('Wednesday'); ?>','thursday':'transnoentities('Thursday'); ?>','friday':'transnoentities('Friday'); ?>','saturday':'transnoentities('Saturday'); ?>', 'sun':'transnoentities('SundayMin'); ?>','mon':'transnoentities('MondayMin'); ?>','tue':'transnoentities('TuesdayMin'); ?>','wed':'transnoentities('WednesdayMin'); ?>','thu':'transnoentities('ThursdayMin'); ?>','fri':'transnoentities('FridayMin'); ?>','sat':'transnoentities('SaturdayMin'); ?>' } From cb0bb55b3aacfd1d0e8684700e728bd29e94100b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 10:29:59 +0200 Subject: [PATCH 607/798] Label centered --- htdocs/projet/tasks.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index b1b802ee25c..8f20d8ff3c4 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2018 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2005-2017 Regis Houssin * * This program is free software; you can redistribute it and/or modify @@ -96,8 +96,6 @@ $planned_workloadhour=(GETPOST('planned_workloadhour', 'int')?GETPOST('planned_w $planned_workloadmin=(GETPOST('planned_workloadmin', 'int')?GETPOST('planned_workloadmin', 'int'):0); $planned_workload=$planned_workloadhour*3600+$planned_workloadmin*60; -$userAccess=0; - $arrayfields=array( 't.ref'=>array('label'=>$langs->trans("RefTask"), 'checked'=>1, 'position'=>80), 't.label'=>array('label'=>$langs->trans("LabelTask"), 'checked'=>1, 'position'=>80), @@ -481,7 +479,7 @@ if ($id > 0 || ! empty($ref)) } // Categories - if($conf->categorie->enabled) { + if ($conf->categorie->enabled) { print '"; @@ -781,7 +779,7 @@ elseif ($id > 0 || ! empty($ref)) print_liste_field_titre("TimeSpent", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); print_liste_field_titre("ProgressCalculated", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); print_liste_field_titre("ProgressDeclared", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("TaskProgressSummary", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); + print_liste_field_titre("TaskProgressSummary", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center '); if ($object->bill_time) { print_liste_field_titre("TimeToBill", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); From 99fcab80d8f57afd52e3343cf3e8d1273865dbe5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 12:52:41 +0200 Subject: [PATCH 608/798] Fix icon size --- htdocs/theme/eldy/info-box.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index c5bd978144c..395a3909b96 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -66,7 +66,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> height: 80px; width: 80px; font-size: 25px; - line-height: 70px; + line-height: 80px; } .info-box-icon > img { max-width: 100%; From 15a765a79a04c0e375dc381972731bf9fb2409b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 13:28:24 +0200 Subject: [PATCH 609/798] Fix responsive --- htdocs/user/home.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/user/home.php b/htdocs/user/home.php index 9a7d0ab94fd..711eb94500c 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -124,8 +124,9 @@ if ($resql) { $num = $db->num_rows($resql); print '
' . $langs->trans("Label") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . 'Total' . $langs->trans("MonthShort".sprintf("%02s", $i)) . ''.$langs->trans("Total").'
'.$langs->trans("Categories").''; print $form->showCategories($object->id, 'project', 1); print "
'; - print ''; + print ''; print ''; + print ''; print ''; $i = 0; @@ -194,7 +195,7 @@ if ($resql) print ($entitystring?' ('.$entitystring.')':''); print ''; - print ''; + print ''; print ''; From 7f6c29fd6599e15bccf7806f37a32c751c6a86ad Mon Sep 17 00:00:00 2001 From: BENKE Charlene <1179011+defrance@users.noreply.github.com> Date: Mon, 19 Aug 2019 15:27:21 +0200 Subject: [PATCH 610/798] bad converting on php 7 is totalpaid is null display a warning error --- htdocs/expensereport/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 07318bc0571..9917682f265 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2058,7 +2058,8 @@ else $totalpaid += $objp->amount; $i++; } - $totalpaid = price2num($totalpaid); // Round $totalpaid to fix floating problem after addition into loop + if ( !is_null($totalpaid)) + $totalpaid = price2num($totalpaid); // Round $totalpaid to fix floating problem after addition into loop $remaintopay = price2num($object->total_ttc - $totalpaid); $resteapayeraffiche = $remaintopay; From 998c25f8d6c6723a128a762c30f034a3dbfcc13a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 17:08:58 +0200 Subject: [PATCH 611/798] Translation --- htdocs/langs/en_US/website.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index d9bc082de09..c43dfc3ebae 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -112,4 +112,5 @@ SearchReplaceInto=Search | Replace into ReplaceString=New string CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page. -Dynamiccontent=Sample of a page with dynamic content \ No newline at end of file +Dynamiccontent=Sample of a page with dynamic content +ImportSite=Import site \ No newline at end of file From def0311f9da7f0df2b082cd58a92b6143b269d2e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 17:26:13 +0200 Subject: [PATCH 612/798] Fix translation --- htdocs/compta/facture/card.php | 4 ++-- htdocs/compta/facture/fiche-rec.php | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index d19e925843e..203d2f22a78 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -3237,8 +3237,8 @@ if ($action == 'create') '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans("TextPreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%B').')', '__INVOICE_MONTH_TEXT__' => $langs->trans("TextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%B').')', '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans("TextNextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'm'), '%B').')', - '__INVOICE_PREVIOUS_YEAR__' => $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')', - '__INVOICE_YEAR__' => $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')', + '__INVOICE_PREVIOUS_YEAR__' => $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')', + '__INVOICE_YEAR__' => $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')', '__INVOICE_NEXT_YEAR__' => $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'y'), '%Y').')' ); diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 9b50e782454..3544aaa1049 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1015,8 +1015,8 @@ if ($action == 'create') $substitutionarray['__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans("TextPreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'm'), '%B').')'; $substitutionarray['__INVOICE_MONTH_TEXT__'] = $langs->trans("TextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date, '%B').')'; $substitutionarray['__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans("TextNextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'm'), '%B').')'; - $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'y'), '%Y').')'; - $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date, '%Y').')'; + $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'y'), '%Y').')'; + $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date, '%Y').')'; $substitutionarray['__INVOICE_NEXT_YEAR__'] = $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'y'), '%Y').')'; // Only on template invoices $substitutionarray['__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans("DateNextInvoiceBeforeGen").' ('.$langs->trans("Example").': '.dol_print_date($object->date_when, 'dayhour').')'; @@ -1357,8 +1357,8 @@ else $substitutionarray['__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans("TextPreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%B').')'; $substitutionarray['__INVOICE_MONTH_TEXT__'] = $langs->trans("TextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%B').')'; $substitutionarray['__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans("TextNextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'm'), '%B').')'; - $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')'; - $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')'; + $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')'; + $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')'; $substitutionarray['__INVOICE_NEXT_YEAR__'] = $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'y'), '%Y').')'; // Only on template invoices $substitutionarray['__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans("DateNextInvoiceBeforeGen").' ('.$langs->trans("Example").': '.dol_print_date(($object->date_when?$object->date_when:dol_now()), 'dayhour').')'; From 28c18afbb6c2d7e50508adc5dc990beb534a3684 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:06:27 +0200 Subject: [PATCH 613/798] Enhance export of website --- htdocs/website/class/website.class.php | 31 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 8d90aae370a..b659edb7d16 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -823,30 +823,47 @@ class Website extends CommonObject return ''; } - $arrayreplacement=array(); + $arrayreplacementinfilename=array(); + $arrayreplacementincss=array(); + $arrayreplacementincss['modulepart=medias&file=image/'.$website->ref.'/'] = "file=image/__WEBSITE_KEY__/"; + $arrayreplacementincss['modulepart=medias&file=js/'.$website->ref.'/'] = "file=js/__WEBSITE_KEY__/"; + $arrayreplacementincss['medias/image/'.$website->ref.'/'] = "medias/image/__WEBSITE_KEY__/"; + $arrayreplacementincss['medias/js/'.$website->ref.'/'] = "medias/js/__WEBSITE_KEY__/"; + $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo_small] = "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__"; + $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo_mini] = "file=logos%2Fthumbs%2F__LOGO_MINI_KEY__"; + $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo] = "file=logos%2Fthumbs%2F__LOGO_KEY__"; $srcdir = $conf->website->dir_output.'/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/containers'; + // Create containers dir + dol_syslog("Create containers dir"); + dol_mkdir($conf->website->dir_temp.'/'.$website->ref.'/containers'); + + // Copy files into medias dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); $srcdir = DOL_DATA_ROOT.'/medias/image/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/image/websitekey'; dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); $srcdir = DOL_DATA_ROOT.'/medias/js/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/js/websitekey'; + // Copy containers files dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); + + $cssindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/styles.css.php'; + dolReplaceInFile($cssindestdir, $arrayreplacementincss, '', 0, 0, 0); + + $htmldeaderindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/htmlheader.html'; + dolReplaceInFile($htmldeaderindestdir, $arrayreplacementincss, '', 0, 0, 0); // Build sql file - dol_syslog("Create containers dir"); - dol_mkdir($conf->website->dir_temp.'/'.$website->ref.'/containers'); - $filesql = $conf->website->dir_temp.'/'.$website->ref.'/website_pages.sql'; $fp = fopen($filesql, "w"); if (empty($fp)) From 6d60b53dbb18d2ba1b8039de1fccf63059042463 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:25:27 +0200 Subject: [PATCH 614/798] Enhance export/import of web sites --- htdocs/website/class/website.class.php | 30 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index b659edb7d16..337f054c7c9 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -825,8 +825,8 @@ class Website extends CommonObject $arrayreplacementinfilename=array(); $arrayreplacementincss=array(); - $arrayreplacementincss['modulepart=medias&file=image/'.$website->ref.'/'] = "file=image/__WEBSITE_KEY__/"; - $arrayreplacementincss['modulepart=medias&file=js/'.$website->ref.'/'] = "file=js/__WEBSITE_KEY__/"; + $arrayreplacementincss['file=image/'.$website->ref.'/'] = "file=image/__WEBSITE_KEY__/"; + $arrayreplacementincss['file=js/'.$website->ref.'/'] = "file=js/__WEBSITE_KEY__/"; $arrayreplacementincss['medias/image/'.$website->ref.'/'] = "medias/image/__WEBSITE_KEY__/"; $arrayreplacementincss['medias/js/'.$website->ref.'/'] = "medias/js/__WEBSITE_KEY__/"; $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo_small] = "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__"; @@ -858,10 +858,10 @@ class Website extends CommonObject dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); $cssindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/styles.css.php'; - dolReplaceInFile($cssindestdir, $arrayreplacementincss, '', 0, 0, 0); + dolReplaceInFile($cssindestdir, $arrayreplacementincss); $htmldeaderindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/htmlheader.html'; - dolReplaceInFile($htmldeaderindestdir, $arrayreplacementincss, '', 0, 0, 0); + dolReplaceInFile($htmldeaderindestdir, $arrayreplacementincss); // Build sql file $filesql = $conf->website->dir_temp.'/'.$website->ref.'/website_pages.sql'; @@ -1029,9 +1029,24 @@ class Website extends CommonObject return -1; } + $arrayreplacement = array(); + $arrayreplacement['__WEBSITE_ID__'] = $object->id; + $arrayreplacement['__WEBSITE_KEY__'] = $object->ref; + $arrayreplacement['__N__'] = $this->db->escape("\n"); // Restore \n + $arrayreplacement['__LOGO_SMALL_KEY__'] = $this->db->escape($mysoc->logo_small); + $arrayreplacement['__LOGO_MINI_KEY__'] = $this->db->escape($mysoc->logo_mini); + $arrayreplacement['__LOGO_KEY__'] = $this->db->escape($mysoc->logo); + // Copy containers dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/containers', $conf->website->dir_output.'/'.$object->ref, 0, 1); // Overwrite if exists + // Make replacement into css and htmlheader file + $cssindestdir = $conf->website->dir_output.'/'.$object->ref.'/styles.css.php'; + $result=dolReplaceInFile($cssindestdir, $arrayreplacement); + + $htmldeaderindestdir = $conf->website->dir_output.'/'.$object->ref.'/htmlheader.html'; + $result = dolReplaceInFile($htmldeaderindestdir, $arrayreplacement); + // Now generate the master.inc.php page $filemaster=$conf->website->dir_output.'/'.$object->ref.'/master.inc.php'; $result = dolSaveMasterFile($filemaster); @@ -1046,13 +1061,6 @@ class Website extends CommonObject $sqlfile = $conf->website->dir_temp.'/'.$object->ref.'/website_pages.sql'; - $arrayreplacement = array(); - $arrayreplacement['__WEBSITE_ID__'] = $object->id; - $arrayreplacement['__WEBSITE_KEY__'] = $object->ref; - $arrayreplacement['__N__'] = $this->db->escape("\n"); // Restore \n - $arrayreplacement['__LOGO_SMALL_KEY__'] = $this->db->escape($mysoc->logo_small); - $arrayreplacement['__LOGO_MINI_KEY__'] = $this->db->escape($mysoc->logo_mini); - $arrayreplacement['__LOGO_KEY__'] = $this->db->escape($mysoc->logo); $result = dolReplaceInFile($sqlfile, $arrayreplacement); $this->db->begin(); From fb8e66a66272123f4e361905631128a659c8baa7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:34:54 +0200 Subject: [PATCH 615/798] Trans --- htdocs/admin/website.php | 4 ++-- htdocs/langs/en_US/website.lang | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php index 5096563ad76..8bcc6cc5417 100644 --- a/htdocs/admin/website.php +++ b/htdocs/admin/website.php @@ -618,14 +618,14 @@ if ($id) // Active print '
"; // Modify link print ''; // Delete link - if ($iserasable) print ''; + if ($iserasable) print ''; else print ''; print "\n"; diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index c43dfc3ebae..6b5c0a300e8 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -2,7 +2,7 @@ Shortname=Code WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them. DeleteWebsite=Delete website -ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. +ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. The files uploaded (like into the medias directory, the ECM module, ...) will remain. WEBSITE_TYPE_CONTAINER=Type of page/container WEBSITE_PAGE_EXAMPLE=Web page to use as example WEBSITE_PAGENAME=Page name/alias From 5dee861f7d2092664b6ec57f496eebad1625565b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:39:40 +0200 Subject: [PATCH 616/798] Fix typo --- htdocs/website/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 28c61aca5cd..2dbc3bb3574 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -656,7 +656,7 @@ if ($action == 'addcontainer') elseif ($tmpgeturl['http_code'] != '200') { $errorforsubresource++; - setEventMessages('Error getting link tag url'.$urltograbbis.': '.$tmpgeturl['http_code'], null, 'errors'); + setEventMessages('Error getting link tag url '.$urltograbbis.': '.$tmpgeturl['http_code'], null, 'errors'); dol_syslog('Error getting '.$urltograbbis.': '.$tmpgeturl['curl_error_msg']); $action='createcontainer'; } From 54234e011f22cfffbc434eb1e2d05a8a343a83fd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 13:26:56 +0200 Subject: [PATCH 617/798] Add version of Sabre lib, add log on login errors. Add compatibility with twoauth --- htdocs/admin/dav.php | 12 +++++++++--- htdocs/dav/fileserver.php | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index 6ac210c1ddb..005394739f0 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -68,7 +68,6 @@ $head=dav_admin_prepare_head(); dol_fiche_head($head, 'webdav', '', -1, 'action'); - if ($action == 'edit') { print '
'; @@ -76,7 +75,7 @@ if ($action == 'edit') print ''; print '
'.$langs->trans("LastUsersCreated", min($num, $max)).'
'.$langs->trans("LastUsersCreated", min($num, $max)).''.$langs->trans("FullList").'
'.dol_print_date($db->jdate($obj->datec), 'dayhour').''.dol_print_date($db->jdate($obj->datec), 'dayhour').''; print $fuserstatic->getLibStatut(3); print ''; - print ''.$actl[($obj->status?1:0)].''; + print ''.$actl[($obj->status?1:0)].''; print "'.img_edit().''.img_delete().''.img_delete().''.img_delete($langs->trans("DisableSiteFirst"), 'class="opacitymedium"').'
'; - print ''; + print ''; foreach($arrayofparameters as $key => $val) { @@ -112,7 +111,7 @@ if ($action == 'edit') else { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - print ''; + print ''; foreach($arrayofparameters as $key => $val) { @@ -177,6 +176,13 @@ if (! empty($conf->global->DAV_ALLOW_PUBLIC_DIR)) } print $message; +print '


'; + +require_once DOL_DOCUMENT_ROOT.'/includes/sabre/autoload.php'; +$version = Sabre\DAV\Version::VERSION; +print ''.$langs->trans("BaseOnSabeDavVersion").' : '.$version.''; + + // End of page llxFooter(); $db->close(); diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index 4e99cf92613..143f48d2033 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -72,15 +72,25 @@ $authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $p global $dolibarr_main_authentication; if (empty($user->login)) + { + dol_syslog("Failed to authenticate to DAV, login is not provided", LOG_WARNING); return false; + } if ($user->socid > 0) + { + dol_syslog("Failed to authenticate to DAV, use is an external user", LOG_WARNING); return false; + } if ($user->login != $username) + { + dol_syslog("Failed to authenticate to DAV, login does not match the login of loaded user", LOG_WARNING); return false; + } // Authentication mode - if (empty($dolibarr_main_authentication)) - $dolibarr_main_authentication='http,dolibarr'; + if (empty($dolibarr_main_authentication)) $dolibarr_main_authentication='dolibarr'; + $dolibarr_main_authentication = preg_replace('/twoauth/', 'dolibarr', $dolibarr_main_authentication); + $authmode = explode(',', $dolibarr_main_authentication); $entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : (!empty($conf->entity) ? $conf->entity : 1)); From 65d11704bb4b0fdccd094e2337aebd5a7f2a764c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 13:46:15 +0200 Subject: [PATCH 618/798] Fix Protect DAV when $dolibarr_main_authentication is forceuser Compatibility with twoauth --- htdocs/api/class/api_login.class.php | 8 ++++++-- htdocs/dav/fileserver.php | 13 ++++++++++++- htdocs/langs/en_US/admin.lang | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/htdocs/api/class/api_login.class.php b/htdocs/api/class/api_login.class.php index 2bf464f7296..b2b1f08f8b6 100644 --- a/htdocs/api/class/api_login.class.php +++ b/htdocs/api/class/api_login.class.php @@ -57,12 +57,15 @@ class Login */ public function index($login, $password, $entity = '', $reset = 0) { - global $conf, $dolibarr_main_authentication, $dolibarr_auto_user; - // Authentication mode + // TODO Remove the API login. The token must be generated from backoffice only. + + // Authentication mode if (empty($dolibarr_main_authentication)) $dolibarr_main_authentication = 'http,dolibarr'; + $dolibarr_main_authentication = preg_replace('/twoauth/', 'dolibarr', $dolibarr_main_authentication); + // Authentication mode: forceuser if ($dolibarr_main_authentication == 'forceuser') { @@ -73,6 +76,7 @@ class Login throw new RestException(403, "Your instance is set to use the automatic login '".$dolibarr_auto_user."' that is not the requested login. API usage is forbidden in this mode."); } } + // Set authmode $authmode = explode(',', $dolibarr_main_authentication); diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index 143f48d2033..b056ac9730c 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -69,7 +69,7 @@ $tmpDir = $conf->dav->multidir_output[$entity]; // We need root dir, not a d $authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $password) { global $user; global $conf; - global $dolibarr_main_authentication; + global $dolibarr_main_authentication, $dolibarr_auto_user; if (empty($user->login)) { @@ -91,6 +91,17 @@ $authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $p if (empty($dolibarr_main_authentication)) $dolibarr_main_authentication='dolibarr'; $dolibarr_main_authentication = preg_replace('/twoauth/', 'dolibarr', $dolibarr_main_authentication); + // Authentication mode: forceuser + if ($dolibarr_main_authentication == 'forceuser') + { + if (empty($dolibarr_auto_user)) $dolibarr_auto_user='auto'; + if ($dolibarr_auto_user != $username) + { + dol_syslog("Warning: your instance is set to use the automatic forced login '".$dolibarr_auto_user."' that is not the requested login. DAV usage is forbidden in this mode."); + return false; + } + } + $authmode = explode(',', $dolibarr_main_authentication); $entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : (!empty($conf->entity) ? $conf->entity : 1)); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index c95c9fe05cc..ee3da865377 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,4 +1932,5 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined -RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. \ No newline at end of file +RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +BaseOnSabeDavVersion=Based on the library SabreDAV version \ No newline at end of file From c60fc6c3d42ed065b19ffd3a102cb8d28669193d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 13:57:25 +0200 Subject: [PATCH 619/798] Add param logcontext on dol_syslog --- htdocs/core/lib/functions.lib.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 87f5b0a771f..75729cbb4f9 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -995,10 +995,11 @@ function dol_strtoupper($utf8_string) * On Linux LOG_ERR=3, LOG_WARNING=4, LOG_INFO=6, LOG_DEBUG=7 * @param int $ident 1=Increase ident of 1, -1=Decrease ident of 1 * @param string $suffixinfilename When output is a file, append this suffix into default log filename. - * @param string $restricttologhandler Output log only for this log handler + * @param string $restricttologhandler Force output of log only to this log handler + * @param array|null $logcontext If defined, an array with extra informations (can be used by some log handlers) * @return void */ -function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename = '', $restricttologhandler = '') +function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename = '', $restricttologhandler = '', $logcontext = null) { global $conf, $user, $debugbar; From f98d3c5c48d6ee8d3d7eb42d1804df659599a22a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 14:08:30 +0200 Subject: [PATCH 620/798] FIX Do not show tooltip if tooltip is empty --- htdocs/modulebuilder/template/admin/setup.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/template/admin/setup.php b/htdocs/modulebuilder/template/admin/setup.php index fea88479abf..fd3ff41c799 100644 --- a/htdocs/modulebuilder/template/admin/setup.php +++ b/htdocs/modulebuilder/template/admin/setup.php @@ -103,7 +103,8 @@ if ($action == 'edit') foreach($arrayofparameters as $key => $val) { print ''; } print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print '
'; @@ -125,7 +126,8 @@ else foreach($arrayofparameters as $key => $val) { print '
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print '' . $conf->global->$key . '
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print ''; if ($key == 'DAV_ALLOW_PRIVATE_DIR') { @@ -116,7 +120,8 @@ else foreach($arrayofparameters as $key => $val) { print '
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print ''; if ($key == 'DAV_ALLOW_PRIVATE_DIR') { diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index 0ca6786b9b2..979ce497ab1 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -130,7 +130,7 @@ print ' 
'.$langs->trans("RestrictApiToIps").''.$langs->trans("RESTICT_API_ON_IP").''; print '
'; $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); - print $form->textwithpicto($langs->trans($key), $tooltiphelp); + $label = $langs->trans($key); + if ($key == 'DAV_RESTICT_ON_IP') $label = $langs->trans("RESTRICT_ON_IP"); + print $form->textwithpicto($label, $tooltiphelp); print ''; if ($key == 'DAV_ALLOW_PRIVATE_DIR') { diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index 979ce497ab1..cbf18f92222 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -80,7 +80,7 @@ if ($action == 'setproductionmode') if ($action == 'save') { - dolibarr_set_const($db, 'API_RESTICT_ON_IP', GETPOST('API_RESTICT_ON_IP', 'alpha')); + dolibarr_set_const($db, 'API_RESTRICT_ON_IP', GETPOST('API_RESTRICT_ON_IP', 'alpha')); } @@ -130,8 +130,8 @@ print ' 
'.$langs->trans("RESTICT_API_ON_IP").''.$langs->trans("RESTRICT_API_ON_IP").''; print '
'; +print $langs->trans('DirectPaymentButton'); +print ''; +print $form->selectyesno("TAKEPOS_DIRECT_PAYMENT", $conf->global->TAKEPOS_DIRECT_PAYMENT, 1); +print "
'; - print '
'; print '
'; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index da28ec88538..1b4badc39b5 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1935,4 +1935,5 @@ AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be de RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. BaseOnSabeDavVersion=Based on the library SabreDAV version -NotAPublicIp=Not a public IP \ No newline at end of file +NotAPublicIp=Not a public IP +MakeAnonymousPing=Make an anonymous Ping '+1' to the Dolibarr foundation server (done 1 time only after installation) to allow the foundation to count the number of Dolibarr installation. \ No newline at end of file diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 375c7e4ea23..620a4b4e7f6 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2205,7 +2205,7 @@ if (! function_exists("llxFooter")) */ function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0) { - global $conf, $langs, $user, $object; + global $conf, $db, $langs, $user, $object; global $delayedhtmlcontent; global $contextpage, $page, $limit; @@ -2334,65 +2334,62 @@ if (! function_exists("llxFooter")) // Add code for the asynchronous anonymous first ping (for telemetry) if (($_SERVER["PHP_SELF"] == DOL_URL_ROOT.'/index.php') || GETPOST('forceping', 'alpha')) { + //print ''; if (empty($conf->global->MAIN_FIRST_PING_OK_DATE) - || (! empty($conf->file->instance_unique_id) && (md5($conf->file->instance_unique_id) != $conf->global->MAIN_FIRST_PING_OK_ID)) + || (! empty($conf->file->instance_unique_id) && (md5($conf->file->instance_unique_id) != $conf->global->MAIN_FIRST_PING_OK_ID) && ($conf->global->MAIN_FIRST_PING_OK_ID != 'disabled')) || GETPOST('forceping', 'alpha')) { - print "\n".''."\n"; - print "\n\n"; - ?> - - file->instance_unique_id)])) + { + print "\n".''."\n"; + print "\n\n"; + $hash_unique_id = md5('dolibarr'.$conf->file->instance_unique_id); + ?> + + \n"; + include_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; + dolibarr_set_const($db, 'MAIN_FIRST_PING_OK_DATE', dol_print_date($now, 'dayhourlog', 'gmt')); + dolibarr_set_const($db, 'MAIN_FIRST_PING_OK_ID', 'disabled'); + } } } print "\n"; print "\n"; - - ?> - - - Date: Sat, 24 Aug 2019 12:44:23 +0200 Subject: [PATCH 679/798] FIX wrong parameters (same error in branch 9, 10, develop) --- htdocs/compta/paiement.php | 2 +- htdocs/projet/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/paiement.php b/htdocs/compta/paiement.php index 4888b758cc1..aa344c3df2e 100644 --- a/htdocs/compta/paiement.php +++ b/htdocs/compta/paiement.php @@ -530,7 +530,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie $sql = 'SELECT f.rowid as facid, f.facnumber, f.total_ttc, f.multicurrency_code, f.multicurrency_total_ttc, f.type,'; $sql.= ' f.datef as df, f.fk_soc as socid'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; - $sql.= ' WHERE f.entity IN ('.getEntity('facture', $conf->entity).')'; + $sql.= ' WHERE f.entity IN ('.getEntity('facture').')'; $sql.= ' AND (f.fk_soc = '.$facture->socid; // Can pay invoices of all child of parent company if(!empty($conf->global->FACTURE_PAYMENTS_ON_DIFFERENT_THIRDPARTIES_BILLS) && !empty($facture->thirdparty->parent)) { diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index 906cb3783f1..4c4ae4c71cf 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -258,7 +258,7 @@ $sql = "SELECT COUNT(p.rowid) as nb, SUM(p.opp_amount)"; $sql.= ", s.nom as name, s.rowid as socid"; $sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; -$sql.= " WHERE p.entity IN (".getEntity('project', $conf->entity).")"; +$sql.= " WHERE p.entity IN (".getEntity('project').")"; $sql.= " AND p.fk_statut = 1"; if ($mine || empty($user->rights->projet->all->lire)) $sql.= " AND p.rowid IN (".$projectsListId.")"; // If we have this test true, it also means projectset is not 2 if ($socid) $sql.= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".$socid.")"; From 73a6b45e23ac22c070ab69c4d37e5ade23bf6c51 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 13:26:01 +0200 Subject: [PATCH 680/798] Fix load langs in takepos --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index ed3e5def318..68c7cf0ef55 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -29,7 +29,7 @@ require '../main.inc.php'; // Load $user and permissions require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; -$langs->loadLangs(array("bills", "cashdesk")); +$langs->loadLangs(array("companies","commercial","bills", "cashdesk")); $id = GETPOST('id','int'); $action = GETPOST('action','alpha'); From 686d43a12230b9673fe23b378e212999c94b533b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 13:44:21 +0200 Subject: [PATCH 681/798] NEW display membership in takepos if member link to thirdparty For some business or cases (ie: fundation), we need to know if customer is a member and membership is up to date. --- htdocs/takepos/invoice.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 17805a6b060..08822d46c6d 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -692,6 +692,29 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep print '

'; print $langs->trans("Customer").': '.$soc->name; print '

'; + + // Module Adherent + if (! empty($conf->adherent->enabled)) + { + require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; + $langs->load("members"); + print '

'; + print $langs->trans("Member").': '; + $adh=new Adherent($db); + $result=$adh->fetch('', '', $invoice->socid); + if ($result > 0) + { + $adh->ref=$adh->getFullName($langs); + print $adh->getFullName($langs); + print '
'.$langs->trans("Type").': '.$adh->type; + print '
'.$langs->trans("SubscriptionEndDate").': '.dol_print_date($adh->datefin, 'day'); + } + else + { + print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; + } + print '

'; + } } if ($action == "search") From cc1de15438d646e83c73facef96afaeaee0a61d1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 13:52:40 +0200 Subject: [PATCH 682/798] Update invoice.php --- htdocs/takepos/invoice.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 08822d46c6d..c628daa44ad 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -707,7 +707,18 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep $adh->ref=$adh->getFullName($langs); print $adh->getFullName($langs); print '
'.$langs->trans("Type").': '.$adh->type; - print '
'.$langs->trans("SubscriptionEndDate").': '.dol_print_date($adh->datefin, 'day'); + if ($adh->datefin) + { + print dol_print_date($adh->datefin, 'day'); + if ($adh->hasDelay()) { + print " ".img_warning($langs->trans("Late")); + } + } + else + { + print $langs->trans("SubscriptionNotReceived"); + if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft and not terminated + } } else { From bb763ecb59bfafde02b8095ef4a8721dba358b86 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 14:02:25 +0200 Subject: [PATCH 683/798] Fix lang in takepos --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index e09c31664cd..4737ecbde27 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -367,7 +367,7 @@ if ($action=="valid" || $action=="history") } else { - if ($invoice->paye) $sectionwithinvoicelink.=''.$langs->trans("Payed").''; + if ($invoice->paye) $sectionwithinvoicelink.=''.$langs->trans("Paid").''; else $sectionwithinvoicelink.=$langs->trans('BillShortStatusValidated'); } $sectionwithinvoicelink.=''; From 361bb724486c81e090b704f08134fd00b5074157 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 14:17:58 +0200 Subject: [PATCH 684/798] Update invoice.php --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index c628daa44ad..663c7d4d006 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -725,7 +725,7 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; } print '

'; - } + } } if ($action == "search") From d2ff37ae723fc37295b6066f0927d1fe57a285fd Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:00:49 +0200 Subject: [PATCH 685/798] NEW email template for Takepos (sending invoice) --- htdocs/takepos/admin/setup.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index 6d33b8a19c2..23e6eb05c48 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -80,6 +80,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_NUMPAD", GETPOST('TAKEPOS_NUMPAD', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_NUM_TERMINALS", GETPOST('TAKEPOS_NUM_TERMINALS', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_EMAIL_TEMPLATE_INVOICE", GETPOST('TAKEPOS_EMAIL_TEMPLATE_INVOICE', 'alpha'), 'chaine', 0, '', $conf->entity); if ($conf->global->TAKEPOS_ORDER_NOTES==1) { @@ -231,6 +232,30 @@ print '
'; print $form->selectyesno("TAKEPOS_DIRECT_PAYMENT", $conf->global->TAKEPOS_DIRECT_PAYMENT, 1); print "
'; +print $langs->trans('EmailTemplate'); +print ''; +include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; +$formmail = new FormMail($db); +$nboftemplates = $formmail->fetchAllEMailTemplate('facture_send', $user, null, -1); // We set lang=null to get in priority record with no lang +//$arraydefaultmessage = $formmail->getEMailTemplate($db, $tmp[1], $user, null, 0, 1, ''); +$arrayofmessagename=array(); +if (is_array($formmail->lines_model)) +{ + foreach($formmail->lines_model as $modelmail) + { + //var_dump($modelmail); + $moreonlabel=''; + if (! empty($arrayofmessagename[$modelmail->label])) $moreonlabel=' ('.$langs->trans("SeveralLangugeVariatFound").')'; + $arrayofmessagename[$modelmail->label]=$langs->trans(preg_replace('/\(|\)/', '', $modelmail->label)).$moreonlabel; + } +} +//var_dump($arraydefaultmessage); +//var_dump($arrayofmessagename); +print $form->selectarray('TAKEPOS_EMAIL_TEMPLATE_INVOICE', $arrayofmessagename, $conf->global->TAKEPOS_EMAIL_TEMPLATE_INVOICE, 'None', 1, 0, '', 0, 0, 0, '', '', 1); +print "
' . $langs->trans('ReductionShort') . '' . $langs->trans('Qty') . '' . $langs->trans('TotalHTShort') . '' . $langs->trans('Total') . '
'; - print $thirdpartystatic->getNomUrl(1, 'customer'); + if ($contextpage == 'poslist') + { + print $thirdpartystatic->name; + } + else + { + print $thirdpartystatic->getNomUrl(1, 'customer'); + } print '
'."\n"; @@ -1237,7 +1237,7 @@ if ($resql) // Action column print '
'; - if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + if (($massactionbutton || $massaction) && $contextpage != 'poslist') // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined { $selected=0; if (in_array($obj->id, $arrayofselected)) $selected=1; From 7b5c9818f7b25b623a68b472f7f79a3083d1898d Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:58:33 +0200 Subject: [PATCH 689/798] Fix context display with takepos societe/list.php --- htdocs/societe/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index daff9aec557..8f352a21b28 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -670,7 +670,7 @@ if ($moreforfilter) $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields -if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); +if ($massactionbutton && $contextpage != 'poslist') $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); if (empty($arrayfields['customerorsupplier']['checked'])) print ''; @@ -1287,7 +1287,7 @@ while ($i < min($num, $limit)) // Action column print ''; - if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + if (($massactionbutton || $massaction) && $contextpage != 'poslist') // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined { $selected=0; if (in_array($obj->rowid, $arrayofselected)) $selected=1; From dbcead47e1eaf8c972b0850704eafe7409341cd1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 16:05:21 +0200 Subject: [PATCH 690/798] Update list.php --- htdocs/societe/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index daff9aec557..ebf03cb2d3d 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -199,7 +199,7 @@ $arrayfields=array( 's.idprof5'=>array('label'=>"ProfId5Short", 'checked'=>$checkedprofid5), 's.idprof6'=>array('label'=>"ProfId6Short", 'checked'=>$checkedprofid6), 's.tva_intra'=>array('label'=>"VATIntraShort", 'checked'=>0), - 'customerorsupplier'=>array('label'=>'Nature', 'checked'=>1), + 'customerorsupplier'=>array('label'=>'Type', 'checked'=>1), 's.fk_prospectlevel'=>array('label'=>"ProspectLevelShort", 'checked'=>$checkprospectlevel), 's.fk_stcomm'=>array('label'=>"StatusProsp", 'checked'=>$checkstcomm), 's2.nom'=>array('label'=>'ParentCompany', 'checked'=>0), From 5d0dbea920d8f794df01f92cf8976498d77bb9a9 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sat, 24 Aug 2019 16:44:06 +0200 Subject: [PATCH 691/798] Control errors before validate invoice in TakePOS --- htdocs/langs/en_US/cashdesk.lang | 2 ++ htdocs/takepos/invoice.php | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 628de17efcc..856cf1de0d2 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -72,3 +72,5 @@ BasicPhoneLayout=Use basic layout for phones SetupOfTerminalNotComplete=Setup of terminal %s is not complete DirectPayment=Direct payment DirectPaymentButton=Direct cash payment button +InvoiceIsAlreadyValidated=Invoice is already validated +NoLinesToBill=No lines to bill diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 17805a6b060..0176330db0a 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -161,7 +161,17 @@ if ($action == 'valid' && $user->rights->facture->creer) $invoice->update($user); } - if (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") + if ($invoice->statut != Facture::STATUS_DRAFT) + { + dol_syslog("Sale already validated"); + dol_htmloutput_errors($langs->trans("InvoiceIsAlreadyValidated", "TakePos"), null, 1); + } + else if (count($invoice->lines)==0) + { + dol_syslog("Sale without lines"); + dol_htmloutput_errors($langs->trans("NoLinesToBill", "TakePos"), null, 1); + } + else if (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") { $invoice->validate($user, '', $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION["takeposterminal"]}); } From 07244f002b7c8e37f690fb20201b67106ffda0df Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sat, 24 Aug 2019 18:11:47 +0200 Subject: [PATCH 692/798] else if to elseif --- htdocs/takepos/invoice.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 0176330db0a..c03ec826d6d 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -166,12 +166,12 @@ if ($action == 'valid' && $user->rights->facture->creer) dol_syslog("Sale already validated"); dol_htmloutput_errors($langs->trans("InvoiceIsAlreadyValidated", "TakePos"), null, 1); } - else if (count($invoice->lines)==0) + elseif (count($invoice->lines)==0) { dol_syslog("Sale without lines"); dol_htmloutput_errors($langs->trans("NoLinesToBill", "TakePos"), null, 1); } - else if (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") + elseif (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") { $invoice->validate($user, '', $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION["takeposterminal"]}); } From 4040693823c01ded9f86f065de5d659926ce37d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 24 Aug 2019 18:12:20 +0200 Subject: [PATCH 693/798] FIX Use a SCA ready workflow with Stripe module --- htdocs/core/class/conf.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 3088d8a95ce..d64033d969d 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -569,6 +569,9 @@ class Conf // By default, we show state code in combo list if (! isset($this->global->MAIN_SHOW_STATE_CODE)) $this->global->MAIN_SHOW_STATE_CODE=1; + // Use a SCA ready workflow with Stripe module + if (! isset($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_NEW_CHECKOUT=1; + // Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal" if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog'; // '' means 'all'. Note that contact is added here as it should be a module later. if (! empty($this->modules_parts['moduleforexternal'])) // Module part to include an external module into the MAIN_MODULES_FOR_EXTERNAL list From 6a906a6064b89cb7bf770ef9480f44a6a115c70c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:38:09 +0200 Subject: [PATCH 694/798] Rename module_part parameter into modulepart into document APIs --- htdocs/api/class/api_documents.class.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index 48d6bf5b903..1b98ad5f2ec 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -56,7 +56,7 @@ class Documents extends DolibarrApi * Note that, this API is similar to using the wrapper link "documents.php" to download a file (used for * internal HTML links of documents into application), but with no need to have a session cookie (the token is used instead). * - * @param string $module_part Name of module or area concerned by file download ('facture', ...) + * @param string $modulepart Name of module or area concerned by file download ('facture', ...) * @param string $original_file Relative path with filename, relative to modulepart (for example: IN201701-999/IN201701-999.pdf) * @return array List of documents * @@ -67,11 +67,11 @@ class Documents extends DolibarrApi * * @url GET /download */ - public function index($module_part, $original_file = '') + public function index($modulepart, $original_file = '') { global $conf, $langs; - if (empty($module_part)) { + if (empty($modulepart)) { throw new RestException(400, 'bad value for parameter modulepart'); } if (empty($original_file)) { @@ -81,7 +81,7 @@ class Documents extends DolibarrApi //--- Finds and returns the document $entity=$conf->entity; - $check_access = dol_check_secure_access_document($module_part, $original_file, $entity, DolibarrApiAccess::$user, '', 'read'); + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, DolibarrApiAccess::$user, '', 'read'); $accessallowed = $check_access['accessallowed']; $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; $original_file = $check_access['original_file']; @@ -98,6 +98,7 @@ class Documents extends DolibarrApi if (! file_exists($original_file_osencoded)) { + dol_syslog("Try to download not found file ".$original_file_osencoded, LOG_WARNING); throw new RestException(404, 'File not found'); } @@ -111,7 +112,7 @@ class Documents extends DolibarrApi * * Test sample 1: { "module_part": "invoice", "original_file": "FA1701-001/FA1701-001.pdf", "doctemplate": "crabe", "langcode": "fr_FR" }. * - * @param string $module_part Name of module or area concerned by file download ('invoice', 'order', ...). + * @param string $modulepart Name of module or area concerned by file download ('invoice', 'order', ...). * @param string $original_file Relative path with filename, relative to modulepart (for example: IN201701-999/IN201701-999.pdf). * @param string $doctemplate Set here the doc template to use for document generation (If not set, use the default template). * @param string $langcode Language code like 'en_US', 'fr_FR', 'es_ES', ... (If not set, use the default language). @@ -126,11 +127,11 @@ class Documents extends DolibarrApi * * @url PUT /builddoc */ - public function builddoc($module_part, $original_file = '', $doctemplate = '', $langcode = '') + public function builddoc($modulepart, $original_file = '', $doctemplate = '', $langcode = '') { global $conf, $langs; - if (empty($module_part)) { + if (empty($modulepart)) { throw new RestException(400, 'bad value for parameter modulepart'); } if (empty($original_file)) { @@ -147,7 +148,7 @@ class Documents extends DolibarrApi //--- Finds and returns the document $entity=$conf->entity; - $check_access = dol_check_secure_access_document($module_part, $original_file, $entity, DolibarrApiAccess::$user, '', 'write'); + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, DolibarrApiAccess::$user, '', 'write'); $accessallowed = $check_access['accessallowed']; $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; $original_file = $check_access['original_file']; @@ -166,7 +167,7 @@ class Documents extends DolibarrApi $templateused=''; - if ($module_part == 'facture' || $module_part == 'invoice') + if ($modulepart == 'facture' || $modulepart == 'invoice') { require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $this->invoice = new Facture($this->db); @@ -181,7 +182,7 @@ class Documents extends DolibarrApi throw new RestException(500, 'Error generating document'); } } - elseif ($module_part == 'commande' || $module_part == 'order') + elseif ($modulepart == 'commande' || $modulepart == 'order') { require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $this->order = new Commande($this->db); @@ -195,7 +196,7 @@ class Documents extends DolibarrApi throw new RestException(500, 'Error generating document'); } } - elseif ($module_part == 'propal' || $module_part == 'proposal') + elseif ($modulepart == 'propal' || $modulepart == 'proposal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $this->propal = new Propal($this->db); From c8078f1195220c884b7f49e8ed9cdbdfd93fb648 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:39:15 +0200 Subject: [PATCH 695/798] Rename module_part parameter into modulepart into document APIs --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 62d791a670a..6ca4df10d38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,7 @@ Following changes may create regressions for some external modules, but were nec * Properties ->libelle_incoterms were renamed into ->label_incoterms * Removed the method liste_array() of project class. It was not used by core code. * The function show_theme() hase been renamed into showSkins() +* Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency. ***** ChangeLog for 10.0.1 compared to 10.0.0 ***** From 6328585395b06519ba8a1b3c57cbbab015948db9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:40:21 +0200 Subject: [PATCH 696/798] Fix: the API_RESTRICT_ON_IP must be at lower level (also on explorer) --- htdocs/api/index.php | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index c63a376e806..dd9ff7aadcb 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -24,6 +24,8 @@ * \file htdocs/api/index.php */ +use Luracast\Restler\Format\UploadFormat; + if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); // Do not check anti CSRF attack test if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not check anti POST attack test if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu @@ -117,6 +119,21 @@ $api->r->addAuthenticationClass('DolibarrApiAccess', ''); UploadFormat::$allowedMimeTypes = array('image/jpeg', 'image/png', 'text/plain', 'application/octet-stream'); +// Restrict API to some IPs +if (! empty($conf->global->API_RESTRICT_ON_IP)) +{ + $allowedip=explode(' ', $conf->global->API_RESTRICT_ON_IP); + $ipremote = getUserRemoteIP(); + if (! in_array($ipremote, $allowedip)) + { + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP); + print 'APIs are not allowed from the IP '.$ipremote; + header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); + //print $conf->global->API_RESTRICT_ON_IP; + exit(0); + } +} + // Call Explorer file for all APIs definitions (this part is slow) if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) @@ -136,6 +153,7 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || { while (($file = readdir($handle))!==false) { + $regmod=array(); if (is_readable($dir.$file) && preg_match("/^mod(.*)\.class\.php$/i", $file, $regmod)) { $module = strtolower($regmod[1]); @@ -165,6 +183,7 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || { if ($file_searched == 'api_access.class.php') continue; + $regapi = array(); if (is_readable($dir_part.$file_searched) && preg_match("/^api_(.*)\.class\.php$/i", $file_searched, $regapi)) { $classname = ucwords($regapi[1]); @@ -204,23 +223,9 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || } // Call one APIs or one definition of an API +$regbis = array(); if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $reg[2] != '/resources.json' && preg_match('/^\/(swagger|resources)\.json\/(.+)$/', $reg[2], $regbis) && $regbis[2] != 'root'))) { - // Restrict API to some IPs - if (! empty($conf->global->API_RESTRICT_ON_IP)) - { - $allowedip=explode(' ', $conf->global->API_RESTRICT_ON_IP); - $ipremote = getUserRemoteIP(); - if (! in_array($ipremote, $allowedip)) - { - dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP); - print 'API not allowed from the IP '.$ipremote; - header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); - //print $conf->global->API_RESTRICT_ON_IP; - exit(0); - } - } - $module = $reg[1]; if ($module == 'explorer') // If we call page to explore details of a service { @@ -268,7 +273,6 @@ if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $api->r->addAPIClass($classname); } -// TODO If not found, redirect to explorer //var_dump($api->r->apiVersionMap); //exit; From 69b2d03c470fc145ad92c435520629a7a8afbfad Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:41:59 +0200 Subject: [PATCH 697/798] FIX Api of documents work with value 'thirdparty' --- 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 a852c78d08b..5861ad07a72 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2452,7 +2452,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping for third parties - elseif (($modulepart == 'company' || $modulepart == 'societe') && !empty($conf->societe->dir_output)) + elseif (($modulepart == 'company' || $modulepart == 'societe' || $modulepart == 'thirdparty') && !empty($conf->societe->dir_output)) { if (empty($entity) || empty($conf->societe->multidir_output[$entity])) return array('accessallowed'=>0, 'error'=>'Value entity must be provided'); if ($fuser->rights->societe->{$lire} || preg_match('/^specimen/i', $original_file)) From 60c3cefc53040eaaf3f311a73b4bc5db03cf7aaa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:41:59 +0200 Subject: [PATCH 698/798] FIX Api of documents work with value 'thirdparty' --- 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 1012b825254..c6a5cb14426 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2445,7 +2445,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping for third parties - elseif (($modulepart == 'company' || $modulepart == 'societe') && !empty($conf->societe->dir_output)) + elseif (($modulepart == 'company' || $modulepart == 'societe' || $modulepart == 'thirdparty') && !empty($conf->societe->dir_output)) { if (empty($entity) || empty($conf->societe->multidir_output[$entity])) return array('accessallowed'=>0, 'error'=>'Value entity must be provided'); if ($fuser->rights->societe->{$lire} || preg_match('/^specimen/i', $original_file)) From 7cb68d6438530e80f8aa6270b34baeb6fb016b85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 18:02:10 +0200 Subject: [PATCH 699/798] NEW Default for Stripe is STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION --- htdocs/core/class/conf.class.php | 4 ++-- htdocs/public/payment/newpayment.php | 32 +++++++++++++++++----------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index d64033d969d..f94c95ff246 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -569,8 +569,8 @@ class Conf // By default, we show state code in combo list if (! isset($this->global->MAIN_SHOW_STATE_CODE)) $this->global->MAIN_SHOW_STATE_CODE=1; - // Use a SCA ready workflow with Stripe module - if (! isset($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_NEW_CHECKOUT=1; + // Use a SCA ready workflow with Stripe module (STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION by default if nothing defined) + if (! isset($this->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) && empty($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=1; // Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal" if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog'; // '' means 'all'. Note that contact is added here as it should be a module later. diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index daf77674190..db37b15345b 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1834,7 +1834,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment print '
'; - print ''; + print ''."\n"; + print ''."\n"; print ''."\n"; print ''."\n"; @@ -1852,7 +1853,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment print ''; print ''; - if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) + if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) // Use a SCA ready method { require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; @@ -1876,8 +1877,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment } } - if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent)) - { + //if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent)) + //{ print '
'; @@ -1914,7 +1915,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment print '
'; - } + //} if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) { @@ -1942,6 +1943,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment { print ''; print ''."\n"; + $urllogofull = 'http://home.destailleur.fr:805/dolibarr_dev/htdocs/viewimage.php?modulepart=mycompany&entity=1&file=logos%2Fthumbs%2Ffbm+logo_small.png'; + 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 '