diff --git a/htdocs/core/lib/doc.lib.php b/htdocs/core/lib/doc.lib.php new file mode 100644 index 00000000000..1338bb2e6f3 --- /dev/null +++ b/htdocs/core/lib/doc.lib.php @@ -0,0 +1,158 @@ + + * Copyright (C) 2006 Rodolphe Quiedeville + * Copyright (C) 2007 Patrick Raguin + * Copyright (C) 2010-2011 Regis Houssin + * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2012 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/lib/doc.lib.php + * \brief Set of functions used for ODT generation + * \ingroup core + */ + + +/** + * Return line description translated in outputlangs and encoded into UTF8 + * + * @param Object $object Object + * @param Line $line Current line number (0 = first line, 1 = second line, ...) + * @param Translate $outputlangs Object langs for output + * @param int $hideref Hide reference + * @param int $hidedesc Hide description + * @param int $issupplierline Is it a line for a supplier object ? + * @return string String with line + */ +function doc_getlinedesc($line,$outputlangs,$hideref=0,$hidedesc=0,$issupplierline=0) +{ + global $db, $conf, $langs; + + $idprod=$line->fk_product; + $label=$line->label; if (empty($label)) $label=$line->libelle; + $desc=$line->desc; if (empty($desc)) $desc=$line->description; + $ref_supplier=$line->ref_supplier; if (empty($ref_supplier)) $ref_supplier=$line->ref_fourn; // TODO Not yet saved for supplier invoices, only supplier orders + $note=$line->note; + + if ($issupplierline) $prodser = new ProductFournisseur($db); + else $prodser = new Product($db); + + if ($idprod) + { + $prodser->fetch($idprod); + // If a predefined product and multilang and on other lang, we renamed label with label translated + if ($conf->global->MAIN_MULTILANGS && ($outputlangs->defaultlang != $langs->defaultlang)) + { + if (! empty($prodser->multilangs[$outputlangs->defaultlang]["libelle"]) && $label == $prodser->label) $label=$prodser->multilangs[$outputlangs->defaultlang]["libelle"]; + if (! empty($prodser->multilangs[$outputlangs->defaultlang]["description"]) && $desc == $prodser->description) $desc=$prodser->multilangs[$outputlangs->defaultlang]["description"]; + if (! empty($prodser->multilangs[$outputlangs->defaultlang]["note"]) && $note == $prodser->note) $note=$prodser->multilangs[$outputlangs->defaultlang]["note"]; + } + } + + // Description short of product line + $libelleproduitservice=$label; + + // Description long of product line + if ($desc && ($desc != $label)) + { + if ( $libelleproduitservice && empty($hidedesc) ) $libelleproduitservice.="\n"; + + if ($desc == '(CREDIT_NOTE)' && $line->fk_remise_except) + { + $discount=new DiscountAbsolute($db); + $discount->fetch($line->fk_remise_except); + $libelleproduitservice=$outputlangs->transnoentitiesnoconv("DiscountFromCreditNote",$discount->ref_facture_source); + } + elseif ($desc == '(DEPOSIT)' && $line->fk_remise_except) + { + $discount=new DiscountAbsolute($db); + $discount->fetch($line->fk_remise_except); + $libelleproduitservice=$outputlangs->transnoentitiesnoconv("DiscountFromDeposit",$discount->ref_facture_source); + // Add date of deposit + if (! empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) echo ' ('.dol_print_date($discount->datec,'day','',$outputlangs).')'; + } + else + { + if ($idprod) + { + if ( empty($hidedesc) ) $libelleproduitservice.=$desc; + } + else + { + $libelleproduitservice.=$desc; + } + } + } + + // If line linked to a product + if ($idprod) + { + // On ajoute la ref + if ($prodser->ref) + { + $prefix_prodserv = ""; + $ref_prodserv = ""; + if ($conf->global->PRODUCT_ADD_TYPE_IN_DOCUMENTS) // In standard mode, we do not show this + { + if($prodser->isservice()) + { + $prefix_prodserv = $outputlangs->transnoentitiesnoconv("Service")." "; + } + else + { + $prefix_prodserv = $outputlangs->transnoentitiesnoconv("Product")." "; + } + } + + if ( empty($hideref) ) + { + if ($issupplierline) $ref_prodserv = $prodser->ref.' ('.$outputlangs->trans("SupplierRef").' '.$ref_supplier.')'; // Show local ref and supplier ref + else $ref_prodserv = $prodser->ref; // Show local ref only + + $ref_prodserv .= " - "; + } + + $libelleproduitservice=$prefix_prodserv.$ref_prodserv.$libelleproduitservice; + } + } + + if ($line->date_start || $line->date_end) + { + $format='day'; + // Show duration if exists + if ($line->date_start && $line->date_end) + { + $period='('.$outputlangs->transnoentitiesnoconv('DateFromTo',dol_print_date($line->date_start, $format, false, $outputlangs),dol_print_date($line->date_end, $format, false, $outputlangs)).')'; + } + if ($line->date_start && ! $line->date_end) + { + $period='('.$outputlangs->transnoentitiesnoconv('DateFrom',dol_print_date($line->date_start, $format, false, $outputlangs)).')'; + } + if (! $line->date_start && $line->date_end) + { + $period='('.$outputlangs->transnoentitiesnoconv('DateUntil',dol_print_date($line->date_end, $format, false, $outputlangs)).')'; + } + //print '>'.$outputlangs->charset_output.','.$period; + $libelleproduitservice.="\n".$period; + //print $libelleproduitservice; + } + + return $libelleproduitservice; +} + +?> diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 5c17ff126f4..47f25af52c1 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -703,7 +703,7 @@ function pdf_writelinedesc(&$pdf,$object,$i,$outputlangs,$w,$h,$posx,$posy,$hide } /** - * Return line description translated in outputlangs and encoded into htmlentities + * Return line description translated in outputlangs and encoded into htmlentities and with
* * @param Object $object Object * @param int $i Current line number (0 = first line, 1 = second line, ...) @@ -756,7 +756,7 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl { $discount=new DiscountAbsolute($db); $discount->fetch($object->lines[$i]->fk_remise_except); - $libelleproduitservice=$outputlangs->transnoentities("DiscountFromDeposit",$discount->ref_facture_source); + $libelleproduitservice=$outputlangs->transnoentitiesnoconv("DiscountFromDeposit",$discount->ref_facture_source); // Add date of deposit if (! empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) echo ' ('.dol_print_date($discount->datec,'day','',$outputlangs).')'; } @@ -826,19 +826,6 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl //print $libelleproduitservice; } - // Note that we used here current custom and origin country code. - /* Fix, this must be done when saving line - if (! empty($prodser->customcode) || ! empty($prodser->country_code)) - { - //var_dump($prodser);exit; - $tmptxt='('; - if (! empty($prodser->customcode)) $tmptxt.=$langs->transnoentitiesnoconv("CustomCode").': '.$prodser->customcode; - if (! empty($prodser->customcode) && ! empty($prodser->country_code)) $tmptxt.=' - '; - if (! empty($prodser->country_code)) $tmptxt.=$langs->transnoentitiesnoconv("CountryOrigin").': '.getCountry($prodser->country_code,0,$db,$outputlangs,0); - $tmptxt.=')'; - $libelleproduitservice.="
".$tmptxt; - }*/ - // Now we convert \n into br $libelleproduitservice=dol_htmlentitiesbr($libelleproduitservice,1); 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 61af8b88a16..adcf63d13b9 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 @@ -28,11 +28,11 @@ require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/doc.lib.php"); /** - * \class doc_generic_order_odt - * \brief Class to build documents using ODF templates generator + * Class to build documents using ODF templates generator */ class doc_generic_order_odt extends ModelePDFCommandes { @@ -129,8 +129,9 @@ class doc_generic_order_odt extends ModelePDFCommandes global $conf; return array( - 'line_fulldesc'=>$line->product_ref.(($line->product_ref && $line->desc)?' - ':'').$line->desc, + 'line_fulldesc'=>doc_getlinedesc($line), 'line_product_ref'=>$line->product_ref, + 'line_product_label'=>$line->product_label, 'line_desc'=>$line->desc, 'line_vatrate'=>vatrate($line->tva_tx,true,$line->info_bits), 'line_up'=>price($line->subprice, 0, $outputlangs), diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php index addbdeca36a..e84184c85b9 100644 --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php @@ -20,7 +20,6 @@ * \file htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php * \ingroup societe * \brief File of class to build ODT documents for third parties - * \author Laurent Destailleur */ require_once(DOL_DOCUMENT_ROOT."/core/modules/facture/modules_facture.php"); @@ -28,11 +27,11 @@ require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/doc.lib.php"); /** - * \class doc_generic_invoice_odt - * \brief Class to build documents using ODF templates generator + * Class to build documents using ODF templates generator */ class doc_generic_invoice_odt extends ModelePDFFactures { @@ -140,9 +139,10 @@ class doc_generic_invoice_odt extends ModelePDFFactures global $conf; return array( - 'line_fulldesc'=>$line->product_ref.(($line->product_ref && $line->desc)?' - ':'').$line->desc, + 'line_fulldesc'=>doc_getlinedesc($line), 'line_product_ref'=>$line->product_ref, - 'line_desc'=>$line->desc, + 'line_product_label'=>$line->product_label, + 'line_desc'=>$line->desc, 'line_vatrate'=>vatrate($line->tva_tx,true,$line->info_bits), 'line_up'=>price($line->subprice, 0, $outputlangs), 'line_qty'=>$line->qty, @@ -155,9 +155,11 @@ class doc_generic_invoice_odt extends ModelePDFFactures ); } - /** Return description of a module - * @param langs Lang object to use for output - * @return string Description + /** + * Return description of a module + * + * @param langs Lang object to use for output + * @return string Description */ function info($langs) { diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php index 5d08f791a08..ee12598ce52 100644 --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php @@ -28,6 +28,7 @@ require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/doc.lib.php"); /** @@ -127,8 +128,9 @@ class doc_generic_proposal_odt extends ModelePDFPropales global $conf; return array( - 'line_fulldesc'=>$line->product_ref.(($line->product_ref && $line->desc)?' - ':'').$line->desc, + 'line_fulldesc'=>doc_getlinedesc($line), 'line_product_ref'=>$line->product_ref, + 'line_product_label'=>$line->product_label, 'line_desc'=>$line->desc, 'line_vatrate'=>vatrate($line->tva_tx,true,$line->info_bits), 'line_up'=>price($line->subprice, 0, $outputlangs), diff --git a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php index d3848d10e8e..0e7d7b08c92 100644 --- a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php +++ b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php @@ -20,18 +20,17 @@ * \file htdocs/core/modules/societe/doc/doc_generic_odt.modules.php * \ingroup societe * \brief File of class to build ODT documents for third parties - * \author Laurent Destailleur */ require_once(DOL_DOCUMENT_ROOT."/core/modules/societe/modules_societe.class.php"); require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/doc.lib.php"); /** - * \class doc_generic_odt - * \brief Class to build documents using ODF templates generator + * Class to build documents using ODF templates generator */ class doc_generic_odt extends ModeleThirdPartyDoc { diff --git a/test/phpunit/PdfTest.php b/test/phpunit/PdfDocTest.php similarity index 85% rename from test/phpunit/PdfTest.php rename to test/phpunit/PdfDocTest.php index ee63931443e..7d5b931c0b1 100755 --- a/test/phpunit/PdfTest.php +++ b/test/phpunit/PdfDocTest.php @@ -17,7 +17,7 @@ */ /** - * \file test/phpunit/CategorieTest.php + * \file test/phpunit/PdfDocTest.php * \ingroup test * \brief PHPUnit test * \remarks To run this script as CLI: phpunit filename.php @@ -30,6 +30,7 @@ require_once dirname(__FILE__).'/../../htdocs/master.inc.php'; require_once dirname(__FILE__).'/../../htdocs/compta/facture/class/facture.class.php'; require_once dirname(__FILE__).'/../../htdocs/product/class/product.class.php'; require_once dirname(__FILE__).'/../../htdocs/core/lib/pdf.lib.php'; +require_once dirname(__FILE__).'/../../htdocs/core/lib/doc.lib.php'; if (empty($user->id)) { @@ -47,7 +48,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PdfTest extends PHPUnit_Framework_TestCase +class PdfDocTest extends PHPUnit_Framework_TestCase { protected $savconf; protected $savuser; @@ -58,9 +59,9 @@ class PdfTest extends PHPUnit_Framework_TestCase * Constructor * We save global variables into local variables * - * @return PdfTest + * @return PdfDocTest */ - function PdfTest() + function PdfDocTest() { //$this->sharedFixture global $conf,$user,$langs,$db; @@ -116,11 +117,11 @@ class PdfTest extends PHPUnit_Framework_TestCase } /** - * testPdfGetLineDesc + * testPdfDocGetLineDesc * * @return void */ - public function testPdfGetLineDesc() + public function testPdfDocGetLineDesc() { global $conf,$user,$langs,$db; $conf=$this->savconf; @@ -135,12 +136,13 @@ class PdfTest extends PHPUnit_Framework_TestCase $localobject->lines[0]->label='Label 1'; $localobject->lines[0]->desc="This is a description with a é accent\n(Country of origin: France)"; - print __METHOD__." fk_product=".$localobject->lines[0]->fk_product."\n"; - print __METHOD__." label=".($localobject->lines[0]->label?$localobject->lines[0]->label:$localobject->lines[0]->libelle)."\n"; - print __METHOD__." desc=".$localobject->lines[0]->desc."\n"; $result=pdf_getlinedesc($localobject,0,$langs); print __METHOD__." result=".$result."\n"; - $this->assertEquals($result,'PIDRESS - Label 1
This is a description with a é accent
(Country of origin: France)'); + $this->assertEquals($result,"PIDRESS - Label 1
This is a description with a é accent
(Country of origin: France)"); + + $result=doc_getlinedesc($localobject->lines[0],$langs); + print __METHOD__." result=".$result."\n"; + $this->assertEquals($result,"PIDRESS - Label 1\nThis is a description with a é accent\n(Country of origin: France)"); } }