diff --git a/ChangeLog b/ChangeLog index 945bf875bfdca3d289e9d592017f86d3e6560858..e7991515f6a7bd8adc941025e9fd87375748f404 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,7 +6,7 @@ English Dolibarr ChangeLog ***** ChangeLog for 3.3.2 compared to 3.3.1 ***** -- Fix: Ducth (nl_NL) translation +- Fix: Dutch (nl_NL) translation - Fix: [ bug #790 ] Spanish localtax RE not being correctly calculated - Generalize fix: file with a specific mask not found, again - Fix: translations and BILL_SUPPLIER_BUILDDOC trigger @@ -19,11 +19,12 @@ English Dolibarr ChangeLog - Fix: [ bug #806 ] Margins module with orders2invoice does not respect cost price - Fix: Orderstoinvoice didn't act as expected when no order was checked - Fix: Bad link to all proposals into Third party card if customer is prospect +- Fix: [ bug #774 ] Bug on creating event with box "all day" crossed - Fix: [ bug #789 ] VAT not being calculated in POS - Fix: [ bug #794 ] Lost filter on zipcode in prospect list -- Fix: [ bug #774 ] Bug on creating event with box "all day" crossed - Fix: [ bug #810 ] Cannot update ODT template path - Fix: [ bug #824 ] MAIN_DB_PREFIX not use into dictionnary +- Fix: [ bug #828 ] Error when code_region is not a number in llx_c_regions (with postgres) ***** ChangeLog for 3.3.1 compared to 3.3 ***** diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 2e49d0f2859d34621d58dc768cb3581ccc6cf161..5a4db149b8792b53afa5bef1498c41d34d34a134 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -383,7 +383,7 @@ if ($id == 11) // Define localtax_typeList (used for dictionnary "c_tva") $localtax_typeList = array(); -if (GETPOST("id") == 10) +if ($id == 10) { $localtax_typeList = array( "0" => $langs->trans("No"), @@ -433,22 +433,32 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) if ($fieldnamekey == 'position') $fieldnamekey = 'Position'; if ($fieldnamekey == 'unicode') $fieldnamekey = 'Unicode'; - $msg.=$langs->trans("ErrorFieldRequired",$langs->transnoentities($fieldnamekey)).'<br>'; + $msg.=$langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)).'<br>'; } } // Other checks if ($tabname[$id] == MAIN_DB_PREFIX."c_actioncomm" && isset($_POST["type"]) && in_array($_POST["type"],array('system','systemauto'))) { $ok=0; - $msg.="Value 'system' and 'systemauto' for type is reserved. You can use 'user' as value to add your own record.<br>"; + $msg.= $langs->transnoentities('ErrorReservedTypeSystemSystemAuto').'<br>'; } - if (isset($_POST["code"]) && $_POST["code"]=='0') { - $ok=0; - $msg.="Code can't contains value 0<br>"; + if (isset($_POST["code"])) + { + if ($_POST["code"]=='0') + { + $ok=0; + $msg.= $langs->transnoentities('ErrorCodeCantContainZero').'<br>'; + } + if (!is_numeric($_POST['code'])) + { + $ok = 0; + $msg .= $langs->transnoentities('ErrorFieldFormat', $langs->transnoentities('Code')).'<br />'; + } } if (isset($_POST["pays"]) && $_POST["pays"]=='0') { $ok=0; - $msg.=$langs->trans("ErrorFieldRequired",$langs->trans("Country")).'<br>'; + $msg.=$langs->transnoentities("ErrorFieldRequired",$langs->transnoentities("Country")).'<br>'; } + // Clean some parameters if (isset($_POST["localtax1"]) && empty($_POST["localtax1"])) $_POST["localtax1"]='0'; // If empty, we force to 0 if (isset($_POST["localtax2"]) && empty($_POST["localtax2"])) $_POST["localtax2"]='0'; // If empty, we force to 0 @@ -510,7 +520,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { - $msg=$langs->trans("ErrorRecordAlreadyExists").'<br>'; + $msg=$langs->transnoentities("ErrorRecordAlreadyExists").'<br>'; } else { dol_print_error($db); @@ -580,7 +590,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') // delete { if ($db->errno() == 'DB_ERROR_CHILD_EXISTS') { - $msg='<div class="error">'.$langs->trans("ErrorRecordIsUsedByChild").'</div>'; + $msg='<div class="error">'.$langs->transnoentities("ErrorRecordIsUsedByChild").'</div>'; } else { @@ -978,6 +988,7 @@ if ($id) $valuetoshow=($obj->code && $key != "Civility".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]); } else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_type_contact') { + $langs->load('agenda'); $key=$langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code)); $valuetoshow=($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]); } diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index f223f1f9d5214db5f0f04f306a12d0b7e193c258..fd1c03ea52e06de472b97c5cb64bccaa4038323a 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -29,6 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php'; $langs->load("admin"); +$langs->load('other'); if (! $user->admin) accessforbidden(); diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 95e549c0b1d54ef35828df8993ce6b879da6c333..81306b47033b7a0b00dff8f6659b5a4810b21c4d 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> - * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2005-2013 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2010-2011 Philippe Grand <philippe.grand@atoo-net.com> @@ -167,7 +167,7 @@ if ($search_societe) } if ($search_montant_ht) { - $sql.= " AND p.total_ht='".$db->escape(trim($search_montant_ht))."'"; + $sql.= " AND p.total_ht='".$db->escape(price2num(trim($search_montant_ht)))."'"; } if ($sall) $sql.= " AND (s.nom LIKE '%".$db->escape($sall)."%' OR p.note LIKE '%".$db->escape($sall)."%' OR pd.description LIKE '%".$db->escape($sall)."%')"; if ($socid) $sql.= ' AND s.rowid = '.$socid; diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index a27041c82a51e5cd0d1f2077e8480199e23508ba..1222a5bdb4a857087c279e99083cfe2d403e509b 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -3,7 +3,7 @@ * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> - * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2005-2013 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr> @@ -184,11 +184,11 @@ if ($search_societe) } if ($search_montant_ht) { - $sql.= ' AND f.total = \''.$db->escape(trim($search_montant_ht)).'\''; + $sql.= ' AND f.total = \''.$db->escape(price2num(trim($search_montant_ht))).'\''; } if ($search_montant_ttc) { - $sql.= ' AND f.total_ttc = \''.$db->escape(trim($search_montant_ttc)).'\''; + $sql.= ' AND f.total_ttc = \''.$db->escape(price2num(trim($search_montant_ttc))).'\''; } if ($month > 0) { diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php index efd7ad6932d7fa745ae20ca4cea104cae3c59b3b..8e585f7e34a98e61d1a4c720ee8692a51c2a51a4 100755 --- a/htdocs/core/class/hookmanager.class.php +++ b/htdocs/core/class/hookmanager.class.php @@ -138,8 +138,6 @@ class HookManager { foreach($modules as $module => $actionclassinstance) { - //var_dump(get_class($actionclassinstance).'->'.$method); - // jump to next class if method does not exists if (! method_exists($actionclassinstance,$method)) continue; // test to avoid to run twice a hook, when a module implements several active contexts @@ -164,13 +162,13 @@ class HookManager } // Generic hooks that return a string (printSearchForm, printLeftBlock, printTopRightMenu, formAddObjectLine, formBuilddocOptions, ...) else - { + { // TODO. this should be done into the method by returning nothing if (is_array($parameters) && ! empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) continue; $result = $actionclassinstance->$method($parameters, $object, $action, $this); - if (is_array($actionclassinstance->results)) $this->resArray =array_merge($this->resArray, $actionclassinstance->results); + if (! empty($actionclassinstance->results) && is_array($actionclassinstance->results)) $this->resArray =array_merge($this->resArray, $actionclassinstance->results); if (! empty($actionclassinstance->resprints)) $this->resPrint.=$actionclassinstance->resprints; // TODO. remove this. array result must be set into $actionclassinstance->results @@ -179,7 +177,7 @@ class HookManager if (! is_array($result) && ! is_numeric($result)) $this->resPrint.=$result; } - //print "method=".$method." results=".count($actionclassinstance->results)." resprints=".count($actionclassinstance->resprints)." result=".$result." resaction=".$resaction; + //print "method=".$method." results=".count($actionclassinstance->results)." resprints=".count($actionclassinstance->resprints)." result=".$result." resaction=".$resaction; } } } diff --git a/htdocs/core/modules/livraison/pdf/pdf_typhon.modules.php b/htdocs/core/modules/livraison/pdf/pdf_typhon.modules.php index 0e65800698a327f5a687f6d54c19c9630bafc5b1..adf1b8689b158254eee1ffd0b63567f516e5527d 100644 --- a/htdocs/core/modules/livraison/pdf/pdf_typhon.modules.php +++ b/htdocs/core/modules/livraison/pdf/pdf_typhon.modules.php @@ -38,6 +38,22 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; */ class pdf_typhon extends ModelePDFDeliveryOrder { + var $db; + var $name; + var $description; + var $type; + + var $phpmin = array(4,3,0); // Minimum version of PHP required by module + var $version = 'dolibarr'; + + var $page_largeur; + var $page_hauteur; + var $format; + var $marge_gauche; + var $marge_droite; + var $marge_haute; + var $marge_basse; + var $emetteur; // Objet societe qui emet /** @@ -75,26 +91,26 @@ class pdf_typhon extends ModelePDFDeliveryOrder $this->franchise=!$mysoc->tva_assuj; - // Recupere emmetteur + // Get source company $this->emetteur=$mysoc; - if (! $this->emetteur->pays_code) $this->emetteur->pays_code=substr($langs->defaultlang,-2); // Par defaut, si n'�tait pas d�fini + if (empty($this->emetteur->country_code)) $this->emetteur->country_code=substr($langs->defaultlang,-2); // By default, if was not defined - // Defini position des colonnes + // Define position of columns $this->posxdesc=$this->marge_gauche+1; - $this->posxcomm=120; + $this->posxcomm=111; //$this->posxtva=111; - $this->posxup=132; - $this->posxqty=168; - $this->posxdiscount=162; - $this->postotalht=177; + //$this->posxup=126; + $this->posxqty=174; + //$this->posxdiscount=162; + //$this->postotalht=174; if ($this->page_largeur < 210) // To work with US executive format { $this->posxcomm-=20; //$this->posxtva-=20; - $this->posxup-=20; + //$this->posxup-=20; $this->posxqty-=20; - $this->posxdiscount-=20; - $this->postotalht-=20; + //$this->posxdiscount-=20; + //$this->postotalht-=20; } $this->tva=array(); @@ -104,15 +120,19 @@ class pdf_typhon extends ModelePDFDeliveryOrder /** - * Fonction generant le bon de livraison sur le disque - * - * @param Object $object Object livraison a generer - * @param Translate $outputlangs Lang output object - * @return int 1 if OK, <=0 if KO + * Function to build pdf onto disk + * + * @param Object $object Object to generate + * @param Translate $outputlangs Lang output object + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param int $hidedetails Do not show line details + * @param int $hidedesc Do not show desc + * @param int $hideref Do not show ref + * @return int 1=OK, 0=KO */ - function write_file($object,$outputlangs) + function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0) { - global $user,$langs,$conf; + global $user,$langs,$conf,$mysoc,$hookmanager; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -126,17 +146,23 @@ class pdf_typhon extends ModelePDFDeliveryOrder $outputlangs->load("deliveries"); $outputlangs->load("sendings"); - if ($conf->expedition->dir_output."/receipt") + if ($conf->expedition->dir_output) { $object->fetch_thirdparty(); - $nblines = count($object->lines); - - $objectref = dol_sanitizeFileName($object->ref); - $dir = $conf->expedition->dir_output."/receipt"; - if (! preg_match('/specimen/i',$objectref)) $dir.= "/" . $objectref; - $file = $dir . "/" . $objectref . ".pdf"; - + // Definition of $dir and $file + if ($object->specimen) + { + $dir = $conf->expedition->dir_output."/receipt"; + $file = $dir . "/SPECIMEN.pdf"; + } + else + { + $objectref = dol_sanitizeFileName($object->ref); + $dir = $conf->expedition->dir_output."/receipt/" . $objectref; + $file = $dir . "/" . $objectref . ".pdf"; + } + if (! file_exists($dir)) { if (dol_mkdir($dir) < 0) @@ -148,9 +174,12 @@ class pdf_typhon extends ModelePDFDeliveryOrder if (file_exists($dir)) { - $pdf=pdf_getInstance($this->format); + $nblines = count($object->lines); + + // Create pdf instance + $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance - $heightforinfotot = 50; // Height reserved to output the info and total part + $heightforinfotot = 30; // Height reserved to output the info and total part $heightforfreetext= (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT)?$conf->global->MAIN_PDF_FREETEXT_HEIGHT:5); // Height reserved to output the free text on last page $heightforfooter = $this->marge_basse + 8; // Height reserved to output the footer (value include bottom margin) $pdf->SetAutoPageBreak(1,0); @@ -195,7 +224,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder /* // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -214,7 +243,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetTextColor(0,0,0); $tab_top = 90; - $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?22:10); + $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42:10); $tab_height = 130; $tab_height_newpage = 150; @@ -223,7 +252,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder { $tab_top = 88; - $pdf->SetFont('','', $default_font_size - 1); // Dans boucle pour gerer multi-page + $pdf->SetFont('','', $default_font_size - 1); $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($object->note_public), 0, 1); $nexY = $pdf->GetY(); $height_note=$nexY-$tab_top; @@ -252,13 +281,46 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetTextColor(0,0,0); $pdf->setTopMargin($tab_top_newpage); - $pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext); // The only function to edit the bottom margin of current page to set it. + $pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforinfotot); // The only function to edit the bottom margin of current page to set it. $pageposbefore=$pdf->getPage(); // Description of product line $curX = $this->posxdesc-1; - pdf_writelinedesc($pdf,$object,$i,$outputlangs,108,3,$curX,$curY); + $showpricebeforepagebreak=1; + + $pdf->startTransaction(); + pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->posxcomm-$curX,3,$curX,$curY,$hideref,$hidedesc); + $pageposafter=$pdf->getPage(); + if ($pageposafter > $pageposbefore) // There is a pagebreak + { + $pdf->rollbackTransaction(true); + $pageposafter=$pageposbefore; + //print $pageposafter.'-'.$pageposbefore;exit; + $pdf->setPageOrientation('', 1, $heightforfooter); // The only function to edit the bottom margin of current page to set it. + pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->posxcomm-$curX,4,$curX,$curY,$hideref,$hidedesc); + $posyafter=$pdf->GetY(); + if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text + { + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page + { + $pdf->AddPage('','',true); + if (! empty($tplidx)) $pdf->useTemplate($tplidx); + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); + $pdf->setPage($pagenb+1); + } + } + else + { + // We found a page break + $showpricebeforepagebreak=0; + } + } + else // No pagebreak + { + $pdf->commitTransaction(); + } + $nexY = $pdf->GetY(); $pageposafter=$pdf->getPage(); $pdf->setPage($pageposbefore); @@ -266,17 +328,15 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. // We suppose that a too long description is moved completely on next page - if ($pageposafter > $pageposbefore) { + if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) { $pdf->setPage($pageposafter); $curY = $tab_top_newpage; } $pdf->SetFont('','', $default_font_size - 1); // On repositionne la police par defaut - $nexY = $pdf->GetY()+4; - /* // TVA - $pdf->SetXY($this->posxtva, $curY); + $pdf->SetXY($this->posxcomm, $curY); $pdf->MultiCell(10, 4, ($object->lines[$i]->tva_tx < 0 ? '*':'').abs($object->lines[$i]->tva_tx), 0, 'R'); // Prix unitaire HT avant remise @@ -284,8 +344,9 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->MultiCell(20, 4, price($object->lines[$i]->subprice), 0, 'R', 0); */ // Quantity + //$qty = pdf_getlineqty($object, $i, $outputlangs, $hidedetails); $pdf->SetXY($this->posxqty, $curY); - $pdf->MultiCell(30, 3, $object->lines[$i]->qty_shipped, 0, 'R'); + $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->posxqty, 3, $object->lines[$i]->qty_shipped, 0, 'R'); /* // Remise sur ligne $pdf->SetXY($this->posxdiscount, $curY); @@ -307,7 +368,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder */ // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(210,210,210))); //$pdf->SetDrawColor(190,190,200); @@ -333,6 +394,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pagenb++; $pdf->setPage($pagenb); $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); } if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak) { @@ -349,34 +411,38 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->AddPage(); if (! empty($tplidx)) $pdf->useTemplate($tplidx); $pagenb++; + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); } } // Show square if ($pagenb == 1) { - $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0); - $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfooter + 1; + $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0); + $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1; } else { - $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1); - $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfooter + 1; + $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0); + $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1; } - /* - * Pied de page - */ + // Affiche zone infos + $posy=$this->_tableau_info($pdf, $object, $bottomlasttab, $outputlangs); + + // Pied de page $this->_pagefoot($pdf,$object,$outputlangs); - + $pdf->AliasNbPages(); + // Check product remaining to be delivered // TODO doit etre modifie //$waitingDelivery = $object->getRemainingDelivered(); + /* $waitingDelivery=''; if (is_array($waitingDelivery) & !empty($waitingDelivery)) { - $pdf->AddPage('P', 'A4'); + $pdf->AddPage(); $this->_pagehead($pdf, $object, 1, $outputlangs); $pdf-> SetY(90); @@ -426,17 +492,28 @@ class pdf_typhon extends ModelePDFDeliveryOrder $this->_pagefoot($pdf,$object,$outputlangs); - } - - $pdf->AliasNbPages(); + $pdf->AliasNbPages(); + }*/ $pdf->Close(); $pdf->Output($file,'F'); + + // Add pdfgeneration hook + if (! is_object($hookmanager)) + { + include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; + $hookmanager=new HookManager($this->db); + } + $hookmanager->initHooks(array('pdfgeneration')); + $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs); + global $action; + $reshook=$hookmanager->executeHooks('afterPDFCreation',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + if (! empty($conf->global->MAIN_UMASK)) - @chmod($file, octdec($conf->global->MAIN_UMASK)); + @chmod($file, octdec($conf->global->MAIN_UMASK)); - return 1; + return 1; // pas d'erreur } else { @@ -449,66 +526,90 @@ class pdf_typhon extends ModelePDFDeliveryOrder return 0; } - + /** + * Show miscellaneous information (payment mode, payment term, ...) + * + * @param PDF &$pdf Object PDF + * @param Object $object Object to show + * @param int $posy Y + * @param Translate $outputlangs Langs object + * @return void + */ + function _tableau_info(&$pdf, $object, $posy, $outputlangs) + { + global $conf; + $default_font_size = pdf_getPDFFontSize($outputlangs); + + $pdf->SetFont('','', $default_font_size); + $pdf->SetXY($this->marge_gauche, $posy); + + $larg_sign = ($this->page_largeur-$this->marge_gauche-$this->marge_droite)/3; + $pdf->Rect($this->marge_gauche, $posy + 1, $larg_sign, 25); + $pdf->SetXY($this->marge_gauche + 2, $posy + 2); + $pdf->MultiCell($larg_sign,2, $outputlangs->trans("For").' '.$outputlangs->convToOutputCharset($mysoc->name).":",'','L'); + + $pdf->Rect(2*$larg_sign+$this->marge_gauche, $posy + 1, $larg_sign, 25); + $pdf->SetXY(2*$larg_sign+$this->marge_gauche + 2, $posy + 2); + $pdf->MultiCell($larg_sign,2, $outputlangs->trans("ForCustomer").':','','L'); + } + /** * Show table for lines * * @param PDF &$pdf Object PDF * @param string $tab_top Top position of table * @param string $tab_height Height of table (rectangle) - * @param int $nexY Y + * @param int $nexY Y (not used) * @param Translate $outputlangs Langs object - * @param int $hidetop Hide top bar of array + * @param int $hidetop 1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title * @param int $hidebottom Hide bottom bar of array * @return void */ function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0) { global $conf,$mysoc; + + // Force to disable hidetop and hidebottom + $hidebottom=0; + if ($hidetop) $hidetop=-1; + $default_font_size = pdf_getPDFFontSize($outputlangs); + + // Amount in (at tab_top - 1) + $pdf->SetTextColor(0,0,0); + $pdf->SetFont('','', $default_font_size - 2); - $pdf->SetDrawColor(128,128,128); + // Output Rec + $this->printRect($pdf, $this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom); // Rect prend une longueur en 3eme param et 4eme param - // Rect prend une longueur en 3eme param - $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height); - // line prend une position y en 3eme param if (empty($hidetop)) + { $pdf->line($this->marge_gauche, $tab_top+6, $this->page_largeur-$this->marge_droite, $tab_top+6); - - $pdf->SetTextColor(0,0,0); + } + + $pdf->SetDrawColor(128,128,128); $pdf->SetFont('','', $default_font_size - 1); - if (empty($hidetop)) { + if (empty($hidetop)) + { $pdf->SetXY($this->posxdesc-1, $tab_top+1); - $pdf->MultiCell(80,2, $outputlangs->transnoentities("Designation"),'','L'); + $pdf->MultiCell($this->posxcomm - $this->posxdesc,2, $outputlangs->transnoentities("Designation"),'','L'); } // Modif SEB pour avoir une col en plus pour les commentaires clients $pdf->line($this->posxcomm, $tab_top, $this->posxcomm, $tab_top + $tab_height); if (empty($hidetop)) { $pdf->SetXY($this->posxcomm, $tab_top+1); - $pdf->MultiCell(80,2, $outputlangs->transnoentities("Comments"),'','L'); + $pdf->MultiCell($this->posxqty - $this->posxcomm,2, $outputlangs->transnoentities("Comments"),'','L'); } // Qty $pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height); if (empty($hidetop)) { $pdf->SetXY($this->posxqty-1, $tab_top+1); - $pdf->MultiCell(30, 2, $outputlangs->transnoentities("QtyShipped"),'','R'); + $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->posxqty, 2, $outputlangs->transnoentities("QtyShipped"),'','R'); } - if (empty($hidebottom)) { - // Modif Seb cadres signatures - $pdf->SetFont('','', $default_font_size); - $larg_sign = ($this->page_largeur-$this->marge_gauche-$this->marge_droite)/3; - $pdf->Rect($this->marge_gauche, ($tab_top + $tab_height + 3), $larg_sign, 25); - $pdf->SetXY($this->marge_gauche + 2, $tab_top + $tab_height + 5); - $pdf->MultiCell($larg_sign,2, $outputlangs->trans("For").' '.$outputlangs->convToOutputCharset($mysoc->name).":",'','L'); - - $pdf->Rect(2*$larg_sign+$this->marge_gauche, ($tab_top + $tab_height + 3), $larg_sign, 25); - $pdf->SetXY(2*$larg_sign+$this->marge_gauche + 2, $tab_top + $tab_height + 5); - $pdf->MultiCell($larg_sign,2, $outputlangs->trans("ForCustomer").':','','L'); - } } /** @@ -522,22 +623,29 @@ class pdf_typhon extends ModelePDFDeliveryOrder */ function _pagehead(&$pdf, $object, $showaddress, $outputlangs) { - global $langs,$conf,$mysoc; + global $conf,$langs,$hookmanager; + $default_font_size = pdf_getPDFFontSize($outputlangs); pdf_pagehead($pdf,$outputlangs,$this->page_hauteur); - $pdf->SetTextColor(0,0,60); - $pdf->SetFont('','B', $default_font_size + 3); - - $posx=$this->page_largeur-$this->marge_droite-100; - $posy=$this->marge_haute; - - $pdf->SetXY($this->marge_gauche,$posy); - + // Show Draft Watermark + if($object->statut==0 && (! empty($conf->global->COMMANDE_DRAFT_WATERMARK)) ) + { + pdf_watermark($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->COMMANDE_DRAFT_WATERMARK); + } + + $pdf->SetTextColor(0,0,60); + $pdf->SetFont('','B', $default_font_size + 3); + + $posy=$this->marge_haute; + $posx=$this->page_largeur-$this->marge_droite-100; + + $pdf->SetXY($this->marge_gauche,$posy); + // Logo - $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; - if ($mysoc->logo) + $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + if ($this->emetteur->logo) { if (is_readable($logo)) { @@ -548,8 +656,8 @@ class pdf_typhon extends ModelePDFDeliveryOrder { $pdf->SetTextColor(200,0,0); $pdf->SetFont('','B', $default_font_size - 2); - $pdf->MultiCell(100, 3, $langs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L'); - $pdf->MultiCell(100, 3, $langs->transnoentities("ErrorGoToModuleSetup"), 0, 'L'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L'); } } else $pdf->MultiCell(100, 4, $this->emetteur->name, 0, 'L'); @@ -557,7 +665,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetFont('','B', $default_font_size + 2); $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 4, $outputlangs->transnoentities("DeliveryOrder")." ".$outputlangs->convToOutputCharset($object->ref), '', 'R'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("DeliveryOrder")." ".$outputlangs->convToOutputCharset($object->ref), '', 'R'); $pdf->SetFont('','',$default_font_size + 2); @@ -585,69 +693,42 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetTextColor(0,0,60); - // Add origin linked objects - // TODO extend to other objects - $object->fetchObjectLinked('','',$object->id,'delivery'); - - if (! empty($object->linkedObjects)) - { - $outputlangs->load('orders'); - - foreach($object->linkedObjects as $elementtype => $objects) - { - $object->fetchObjectLinked('','',$objects[0]->id,$objects[0]->element); - - foreach($object->linkedObjects as $elementtype => $objects) - { - $num=count($objects); - for ($i=0;$i<$num;$i++) - { - $order=new Commande($this->db); - $result=$order->fetch($objects[$i]->id); - if ($result >= 0) - { - $posy+=5; - $pdf->SetXY($posx,$posy); - $pdf->SetFont('','', $default_font_size - 1); - $text=$order->ref; - if ($order->ref_client) $text.=' ('.$order->ref_client.')'; - $pdf->MultiCell(100, 4, $outputlangs->transnoentities("RefOrder")." : ".$outputlangs->transnoentities($text), '', 'R'); - } - } - } - } - } - + $posy+=2; + + // Show list of linked objects + $posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'R', $default_font_size); + if ($showaddress) { - // Emetteur + // Sender properties + $carac_emetteur = pdf_build_address($outputlangs,$this->emetteur); + + // Show sender $posy=42; + $posx=$this->marge_gauche; + if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80; $hautcadre=40; + + // Show sender frame $pdf->SetTextColor(0,0,0); $pdf->SetFont('','', $default_font_size - 2); - $pdf->SetXY($this->marge_gauche,$posy-5); - $pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":"); - - - $pdf->SetXY($this->marge_gauche,$posy); + $pdf->SetXY($posx,$posy-5); + $pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L'); + $pdf->SetXY($posx,$posy); $pdf->SetFillColor(230,230,230); $pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1); - - - $pdf->SetXY($this->marge_gauche+2,$posy+3); - - // Nom emetteur $pdf->SetTextColor(0,0,60); + + // Show sender name + $pdf->SetXY($posx+2,$posy+3); $pdf->SetFont('','B',$default_font_size); $pdf->MultiCell(80, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L'); - // Sender properties - $carac_emetteur = pdf_build_address($outputlangs,$this->emetteur); - - $pdf->SetFont('','', $default_font_size - 1); - $pdf->SetXY($this->marge_gauche+2,$posy+9); - $pdf->MultiCell(80, 3, $carac_emetteur, 0, 'L'); - + // Show sender information + $pdf->SetXY($posx+2,$posy+8); + $pdf->SetFont('','', $default_font_size - 1); + $pdf->MultiCell(80, 4, $carac_emetteur, 0, 'L'); + // Client destinataire $posy=42; $pdf->SetTextColor(0,0,0); @@ -655,7 +736,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetXY(102,$posy-5); $pdf->MultiCell(80,5, $outputlangs->transnoentities("DeliveryAddress").":", 0, 'L'); - // If SHIPPING contact defined on invoice, we use it + // If SHIPPING contact defined on order, we use it $usecontact=false; $arrayidcontact=$object->commande->getIdContact('external','SHIPPING'); if (count($arrayidcontact) > 0) @@ -677,7 +758,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $carac_client_name=$outputlangs->convToOutputCharset($object->client->nom); } - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,$object->contact,$usecontact,'target'); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target'); // Show recipient $widthrecbox=100; @@ -700,7 +781,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder // Show recipient information $pdf->SetFont('','', $default_font_size - 1); - $pdf->SetXY($posx+2,$posy+8); + $pdf->SetXY($posx+2,$posy+4+(dol_nboflines_bis($carac_client_name,50)*4)); $pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L'); } @@ -713,7 +794,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder * @param Object $object Object to show * @param Translate $outputlangs Object lang for output * @param int $hidefreetext 1=Hide free text - * @return void + * @return int Return height of bottom margin including footer text */ function _pagefoot(&$pdf,$object,$outputlangs,$hidefreetext=0) { diff --git a/htdocs/externalsite/frames.php b/htdocs/externalsite/frames.php index e93dc392d9343bbaad6d504626e75e405759376d..825398f363651ff6500dae917e61cb7fe0ccab4e 100644 --- a/htdocs/externalsite/frames.php +++ b/htdocs/externalsite/frames.php @@ -25,12 +25,12 @@ require '../main.inc.php'; -$langs->load("externalsite@externalsite"); +$langs->load("externalsite"); if (empty($conf->global->EXTERNALSITE_URL)) { llxHeader(); - print '<div class="error">Module ExternalSite was not configured properly.</div>'; + print '<div class="error">'.$langs->trans('ExternalSiteModuleNotComplete').'</div>'; llxFooter(); } diff --git a/htdocs/externalsite/frametop.php b/htdocs/externalsite/frametop.php index 5808c97490972e6f2f30f682d9bdda1c7bcc5724..0bf7a259c8f460e3d44b4a6f49148036b281c050 100644 --- a/htdocs/externalsite/frametop.php +++ b/htdocs/externalsite/frametop.php @@ -24,7 +24,7 @@ require ("../main.inc.php"); -$langs->load("@externalsite"); +$langs->load("externalsite"); top_htmlhead("",""); top_menu("","","_top"); diff --git a/htdocs/fourn/facture/index.php b/htdocs/fourn/facture/index.php index 6181ec15b24058d1e279d27d325754c4159805f3..5d1f97953807057e691f364b2f3c0a702924429d 100644 --- a/htdocs/fourn/facture/index.php +++ b/htdocs/fourn/facture/index.php @@ -1,7 +1,8 @@ <?php /* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net> - * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2005-2013 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.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 @@ -155,12 +156,12 @@ if (GETPOST("search_societe")) if (GETPOST("search_montant_ht")) { - $sql .= " AND fac.total_ht = '".$db->escape(GETPOST("search_montant_ht"))."'"; + $sql .= " AND fac.total_ht = '".$db->escape(price2num(GETPOST("search_montant_ht")))."'"; } if (GETPOST("search_montant_ttc")) { - $sql .= " AND fac.total_ttc = '".$db->escape(GETPOST("search_montant_ttc"))."'"; + $sql .= " AND fac.total_ttc = '".$db->escape(price2num(GETPOST("search_montant_ttc")))."'"; } $sql.= $db->order($sortfield,$sortorder); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 8d613053e3ab9570a4a2cea282750901da2d3fe8..2347bcdf22c51012e01c68731609a59e7b6cace0 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -46,6 +46,8 @@ ErrorModuleRequireDolibarrVersion=Error, this module requires Dolibarr version % ErrorDecimalLargerThanAreForbidden=Error, a precision higher than <b>%s</b> is not supported. DictionnarySetup=Dictionary setup Dictionnary=Dictionaries +ErrorReservedTypeSystemSystemAuto=Value 'system' and 'systemauto' for type is reserved. You can use 'user' as value to add your own record +ErrorCodeCantContainZero=Code can't contain value 0 DisableJavascript=Disable JavaScript and Ajax functions ConfirmAjax=Use Ajax confirmation popups UseSearchToSelectCompany=Use autocompletion fields to choose third parties (instead of using a list box).<br><br>Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant SOCIETE_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. @@ -524,6 +526,7 @@ Permission98=Dispatch invoice accountancy lines Permission101=Read sendings Permission102=Create/modify sendings Permission104=Validate sendings +Permission106=Export sendings Permission109=Delete sendings Permission111=Read financial accounts Permission112=Create/modify/delete and compare transactions diff --git a/htdocs/langs/en_US/commercial.lang b/htdocs/langs/en_US/commercial.lang index baac58e46428e8192e1d50de24f265823cdb459a..c17ddf2e8be6eea18456ca5c692499b8c29a824f 100644 --- a/htdocs/langs/en_US/commercial.lang +++ b/htdocs/langs/en_US/commercial.lang @@ -81,6 +81,7 @@ ActionAC_SHIP=Send shipping by mail ActionAC_SUP_ORD=Send supplier order by mail ActionAC_SUP_INV=Send supplier invoice by mail ActionAC_OTH=Other +ActionAC_OTH_AUTO=Other (automatically inserted events) ActionAC_MANUAL=Manually inserted events ActionAC_AUTO=Automatically inserted events Stats=Sales statistics diff --git a/htdocs/langs/en_US/externalsite.lang b/htdocs/langs/en_US/externalsite.lang index 3ae2098b92a97d334ee325811b80f45db5943887..213fa314ab12d3d1669fd1f8acae6e646482157e 100644 --- a/htdocs/langs/en_US/externalsite.lang +++ b/htdocs/langs/en_US/externalsite.lang @@ -1,4 +1,5 @@ # Dolibarr language file - en_US - externalsite CHARSET=UTF-8 ExternalSiteSetup=Setup link to external website -ExternalSiteURL=External Site URL \ No newline at end of file +ExternalSiteURL=External Site URL +ExternalSiteModuleNotComplete=Module ExternalSite was not configured properly. \ No newline at end of file diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 67adb36dfeb99b9c3686a4a2c826ddfebc4488d8..8a5a55f6e0103e1f1e320e1266c3a4f894482ec2 100755 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -131,4 +131,9 @@ NoCPforMonth=No leave this month. Jours=days nbJours=Number days TitleAdminCP=Configuration of Holidays -Permission20001=Read / Modify all requests of holidays +Permission20001=Read/create/modify their holidays +Permission20002=Read/modify all requests of holidays +Permission20003=Delete their holidays requests +Permission20004=Define users holidays +Permission20005=Review log of modified holidays +Permission20006=Access holidays monthly report \ No newline at end of file diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang index ad4a06a6f79e20f906ce2522acd7f2a77fa8d968..769f635bc4c0e3d3b8df0e4d8027aefb1f654c3a 100644 --- a/htdocs/langs/es_ES/admin.lang +++ b/htdocs/langs/es_ES/admin.lang @@ -46,6 +46,8 @@ ErrorModuleRequireDolibarrVersion=Error, este módulo requiere una versión %s o ErrorDecimalLargerThanAreForbidden=Error, las precisiones superiores a <b>%s</b> no están soportadas. DictionnarySetup=Diccionarios Dictionnary=Diccionarios +ErrorReservedTypeSystemSystemAuto=El uso del tipo 'system' y 'systemauto' está reservado. Puede utilizar 'user' como valor para añadir su propio registro +ErrorCodeCantContainZero=El código no puede contener el valor 0 DisableJavascript=Desactivar las funciones Javascript ConfirmAjax=Utilizar los popups de confirmación Ajax UseSearchToSelectCompany=Utilizar un formulario de búsqueda para buscar terceros (en vez de lista desplegable)<br><br>Tenga en cuenta que si tiene un gran número de productos o servicios (>100 000), puede mejorar el rendimiento mediante la constante SOCIETE_DONOTSEARCH_ANYWHERE a 1 en Configuración->Varios. La búsqueda se limitará entonces al inicio de la cadena. @@ -294,7 +296,7 @@ ServerNotAvailableOnIPOrPort=Servidor no disponible en la dirección <b>%s</b> e DoTestServerAvailability=Probar conectividad con el servidor DoTestSend=Probar envío DoTestSendHTML=Probar envío HTML -ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, no se puede usar opción @ si la secuencia {yy}{mm} o {yyyy}{mm} no se encuentra en la máscara. +ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, no se puede usar la opción @ si la secuencia {yy}{mm} o {yyyy}{mm} no se encuentra en la máscara. UMask=Parámetro UMask de nuevos archivos en Unix/Linux/BSD. UMaskExplanation=Este parámetro determina los derechos de los archivos creados en el servidor Dolibarr (durante la subida, por ejemplo).<br>Este debe ser el valor octal (por ejemplo, 0666 significa lectura / escritura para todos).<br>Este parámetro no tiene ningún efecto sobre un servidor Windows. SeeWikiForAllTeam=Vea el wiki para más detalles de todos los actores y de su organización @@ -462,6 +464,8 @@ Module2900Name=GeoIPMaxmind Module2900Desc=Capacidades de conversión GeoIP Maxmind Module5000Name=Multi-empresa Module5000Desc=Permite gestionar varias empresas +Module6000Name=Workflow +Module6000Desc=Gestión de flujos de trabajo Module20000Name=Días libres Module20000Desc=Gestión de los días libres de los empleados Module50000Name=PayBox @@ -525,6 +529,7 @@ Permission98=Desglosar líneas de facturas Permission101=Consultar expediciones Permission102=Crear/modificar expediciones Permission104=Validar expediciones +Permission106=Exportar expediciones Permission109=Eliminar expediciones Permission111=Consultar cuentas financieras (cuentas bancarias, cajas) Permission112=Crear/modificar cantidad/eliminar registros bancarios @@ -893,7 +898,7 @@ MAIN_ROUNDING_RULE_TOT=Tamaño rango para el redondeo (para algunos países que UnitPriceOfProduct=Precio unitario sin IVA de un producto TotalPriceAfterRounding=Precio total después del redondeo ParameterActiveForNextInputOnly=Parámetro efectivo solamente a partir de las próximas sesiones -NoEventOrNoAuditSetup=No se han registrado eventos de seguridad. Esto puede ser normal si la auditoría no ha sido habilitado en la página "configuración->seguridad->auditoría". +NoEventOrNoAuditSetup=No se han registrado eventos de seguridad. Esto puede ser normal si la auditoría no ha sido habilitada en la página "configuración->seguridad->auditoría". NoEventFoundWithCriteria=No se han encontrado eventos de seguridad para tales criterios de búsqueda. SeeLocalSendMailSetup=Ver la configuración local de sendmail BackupDesc=Para realizar una copia de seguridad completa de Dolibarr, usted debe: diff --git a/htdocs/langs/es_ES/bills.lang b/htdocs/langs/es_ES/bills.lang index 2ac03e256dbc81a8c44a3028351a9877a66eeeb9..7f2fbf259ec735617d65ec6d105a082cf9bf65e4 100644 --- a/htdocs/langs/es_ES/bills.lang +++ b/htdocs/langs/es_ES/bills.lang @@ -250,7 +250,7 @@ Deposit=Anticipo Deposits=Anticipos DiscountFromCreditNote=Descuento resultante del abono %s DiscountFromDeposit=Pagos de la factura de anticipo %s -AbsoluteDiscountUse=Este tipo de crédito no puede ser utilizado en una factura antes de su validación +AbsoluteDiscountUse=Este tipo de descuento no puede ser utilizado en una factura antes de su validación CreditNoteDepositUse=La factura debe de estar validada para poder utilizar este tipo de créditos NewGlobalDiscount=Nuevo descuento fijo NewRelativeDiscount=Nuevo descuento diff --git a/htdocs/langs/es_ES/commercial.lang b/htdocs/langs/es_ES/commercial.lang index 3b5d007aac97bfbd007341602d3a6b53e929a28f..9d774606bf0c56dc1a49a5c70549fcf66aabd833 100644 --- a/htdocs/langs/es_ES/commercial.lang +++ b/htdocs/langs/es_ES/commercial.lang @@ -81,6 +81,7 @@ ActionAC_SHIP=Envío expedición por correo ActionAC_SUP_ORD=Envío pedido a proveedor por correo ActionAC_SUP_INV=Envío factura de proveedor por correo ActionAC_OTH=Otra +ActionAC_OTH_AUTO=Otra (eventos insertados automáticamente) ActionAC_MANUAL=Eventos creados manualmente ActionAC_AUTO=Eventos creados automáticamente Stats=Estadísticas de venta diff --git a/htdocs/langs/es_ES/externalsite.lang b/htdocs/langs/es_ES/externalsite.lang index 6052639eb4b00dd4395982d5479fbe57580445d5..131d9f69fc4d642e6995bb737cb42e6d37a78c31 100644 --- a/htdocs/langs/es_ES/externalsite.lang +++ b/htdocs/langs/es_ES/externalsite.lang @@ -1,4 +1,5 @@ # Dolibarr language file - es_ES - externalsite CHARSET=UTF-8 ExternalSiteSetup=Configuración del enlace al sitio web externo -ExternalSiteURL=URL del sitio externo \ No newline at end of file +ExternalSiteURL=URL del sitio externo +ExternalSiteModuleNotComplete=El módulo Sitio web externo no ha sido configurado correctamente. \ No newline at end of file diff --git a/htdocs/langs/es_ES/holiday.lang b/htdocs/langs/es_ES/holiday.lang index ebf1a0457d933f93fa97cae71df6d97764b32ddd..93387f29525182fa1bda004c1856355fd5f13929 100644 --- a/htdocs/langs/es_ES/holiday.lang +++ b/htdocs/langs/es_ES/holiday.lang @@ -132,4 +132,9 @@ NoCPforMonth=Sin vacaciones este mes. Jours=días nbJours=Número de días TitleAdminCP=Configuración de las vacaciones -Permission20001=Leer / Crear / Modificar sus vacaciones \ No newline at end of file +Permission20001=Consultar/crear/modificar sus vacaciones +Permission20002=Consultar/modificar todas las solicitudes de permisos retribuídos +Permission20003=Eliminar las solicitudes de permisos retribuídos +Permission20004=Definir los permisos retribuídos de los usuarios +Permission20005=Consultar el historial de modificaciones de permisos retribuidos +Permission20006=Acceder al informe mensual de permisos retribuidos \ No newline at end of file diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 616cfc6d550175b18e89efbb92898390563c526b..51966eebcf22bd1f21418cc30250fb3e3b4a6420 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -45,6 +45,8 @@ ErrorModuleRequireDolibarrVersion= Erreur, ce module requiert une version %s ou ErrorDecimalLargerThanAreForbidden= Erreur, les précisions supérieures à <b>%s</b> ne sont pas supportées. DictionnarySetup= Dictionnaires Dictionnary= Dictionnaires +ErrorReservedTypeSystemSystemAuto= +ErrorCodeCantContainZero= DisableJavascript= Désactiver les fonctions Javascript et Ajax ConfirmAjax= Utiliser les popups de confirmation Ajax UseSearchToSelectCompany= Utiliser un champ avec autocomplétion pour choisir un tiers (plutôt qu'une liste déroulante).<br><br>Notez que si vous avez un nombre important de produits ou services (> 100 000), vous pouvez améliorer les performances en définissant la constante SOCIETE_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine. @@ -518,6 +520,7 @@ Permission98= Ventiler les lignes de factures Permission101= Consulter les expéditions Permission102= Créer/modifier les expéditions Permission104= Valider les expéditions +Permission106= Exporter les expéditions Permission109= Supprimer les expéditions Permission111= Consulter les comptes financiers (comptes bancaires, caisses) Permission112= Créer/modifier montant/supprimer écritures bancaires diff --git a/htdocs/langs/fr_FR/commercial.lang b/htdocs/langs/fr_FR/commercial.lang index 79937cb84fbeeb29af73137afc6bd4773f0eabdd..e9ab93d8f37fe66a54b525abd1bac580481786d4 100644 --- a/htdocs/langs/fr_FR/commercial.lang +++ b/htdocs/langs/fr_FR/commercial.lang @@ -81,6 +81,7 @@ ActionAC_SHIP=Envoi bon d'expédition par mail ActionAC_SUP_ORD=Envoi commande fournisseur par mail ActionAC_SUP_INV=Envoi facture fournisseur par mail ActionAC_OTH=Autre +ActionAC_OTH_AUTO=Autre (evênements insérés automatiquement) ActionAC_MANUAL=Evênements insérés manuellement ActionAC_AUTO=Evênements insérés automatiquement Stats=Statistiques de vente diff --git a/htdocs/langs/fr_FR/externalsite.lang b/htdocs/langs/fr_FR/externalsite.lang index ff1fb3112c13da7a26427423f1e38a9aa76a5465..36c8686a3c360f85db2fffe103283377c6b6734c 100644 --- a/htdocs/langs/fr_FR/externalsite.lang +++ b/htdocs/langs/fr_FR/externalsite.lang @@ -1,4 +1,5 @@ # Dolibarr language file - fr_FR - externalsite CHARSET=UTF-8 ExternalSiteSetup=Configuration du lien vers le site externe -ExternalSiteURL=URL du site externe \ No newline at end of file +ExternalSiteURL=URL du site externe +ExternalSiteModuleNotComplete= \ No newline at end of file diff --git a/htdocs/langs/fr_FR/holiday.lang b/htdocs/langs/fr_FR/holiday.lang index c01d84218bf52a3fdee21abb627a108c50d41b65..e09d0de2cbd19c99231263cfbf2bdd75b005a03c 100644 --- a/htdocs/langs/fr_FR/holiday.lang +++ b/htdocs/langs/fr_FR/holiday.lang @@ -130,4 +130,9 @@ NoCPforMonth=Aucun congé ce mois-ci. Jours=jours nbJours=Nombre jours TitleAdminCP=Configuration des Congés -Permission20001=Lire / Créer / modifier ses congès \ No newline at end of file +Permission20001=Lire / Créer / modifier ses congès +Permission20002=Lire / Modifier toutes les demandes de congés payés +Permission20003=Supprimer des demandes de congés payés +Permission20004=Définir les congés payés des utilisateurs +Permission20005=Voir les logs de modification des congés payés +Permission20006=Accéder au rapport mensuel des congés payés \ No newline at end of file diff --git a/htdocs/langs/nb_NO/main.lang b/htdocs/langs/nb_NO/main.lang index 020639a5d9054a6d1fa94b98ca6fb888a7f43f17..203896ba362aa32713b53b9103b75e9bdcb56ca8 100644 --- a/htdocs/langs/nb_NO/main.lang +++ b/htdocs/langs/nb_NO/main.lang @@ -535,8 +535,8 @@ Login=Innlogging Month01=januar Month02=februar Month03=mars -Month04=April -Month05=kan +Month04=april +Month05=mai Month06=juni Month07=juli Month08=August