Add Extrafields on PDF Models: Difference between revisions

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
No edit summary
Tag: 2017 source edit
Tag: 2017 source edit
Line 53: Line 53:
=Create a new invoice template=
=Create a new invoice template=
All the steps are describes there [[Create a PDF document template]]
All the steps are describes there [[Create a PDF document template]]
* Open the '''core\modules\facture\doc\''' directory
 
* Copy the '''pdf_crabe.modules.php'''  
*Open the '''core\modules\facture\doc\''' directory
* Rename the copy as '''pdf_my_template.modules.php'''
*Copy the '''pdf_crabe.modules.php'''
* Edit and make the following changes in the code:  
*Rename the copy as '''pdf_my_template.modules.php'''
# Rename '''class pdf_crabe''' to '''class pdf_my_template'''
*Edit and make the following changes in the code:
# Rename constant '''$this->name = "crabe";''' to '''$this->name = "my_template";'''
 
# Update the '''$this->description''' with your description
#Rename '''class pdf_crabe''' to '''class pdf_my_template'''
# Save file. Now the template will be available in the list of models in Dolibarr[[File:Invoices module setup template.png|none|thumb]]
#Rename constant '''$this->name = "crabe";''' to '''$this->name = "my_template";'''
# Test this model (by generating a pdf) before going further ...
#Update the '''$this->description''' with your description
#Save file. Now the template will be available in the list of models in Dolibarr[[File:Invoices module setup template.png|none|thumb]]
#Test this model (by generating a pdf) before going further ...


=Modify the new invoice template=
=Modify the new invoice template=
*Open the new template '''pdf_my_template.modules.php'''
*Open the new template '''pdf_my_template.modules.php'''
*Look for the last '''require_one''' lines ate the beginning of the template
*Look for the last '''require_one''' lines ate the beginning of the template
*Add the line <source lang="php">require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';</source>[[File:Add_extrafields_in_pdf_1.png|none|thumb]]
*Add the line <source lang="php">require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';</source>[[File:Add_extrafields_in_pdf_1.png|none|thumb]]


== Module complementary attribute ==
==Module complementary attribute==
 
*Find the <source lang="php">function write_file</source>
*Find the <source lang="php">function write_file</source>
*Just before the <source lang="php">// Affiche notes</source>
*Just before the <source lang="php">// Affiche notes</source>
Line 81: Line 85:
*Add the code to print the extrafiled <source lang="php">
*Add the code to print the extrafiled <source lang="php">
$pdf->writeHTMLCell (190,3, $this->posxdesc-1, $tab_top-5, $outputlangs->convToOutputCharset($object->array_options['options_my_extra']),0,1);
$pdf->writeHTMLCell (190,3, $this->posxdesc-1, $tab_top-5, $outputlangs->convToOutputCharset($object->array_options['options_my_extra']),0,1);
</source>
</source>[[File:Invoices module template Modification.png]]
[[File:Invoices module template Modification.png|none|thumb]]
 


==Line complementary attribute==


== Line complementary attribute ==
*Find <source lang="php">$object->fetch_thirdparty();</source>
*Find <source lang="php">$object->fetch_thirdparty();</source>
*Add, just after, the code to load extrafield array in object <source lang="php">
*Add, just after, the code to load extrafield array in object <source lang="php">
$extrafields = new ExtraFields($db);
$extrafields = new ExtraFields($db);
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
</source>[[File:Add extrafields line in pdf 1.png|thumb]]
</source>[[File:Add extrafields line in pdf 1.png]]
*Find <source lang="php">// Loop on each lines
*Find <source lang="php">// Loop on each lines
for ($i = 0; $i < $nblignes; $i++)
for ($i = 0; $i < $nblignes; $i++)
Line 96: Line 100:
*Add, just after, the code to load line extrafield into object <source lang="php">
*Add, just after, the code to load line extrafield into object <source lang="php">
$object->lines[$i]->fetch_optionals($object->lines[$i]->rowid,$extralabelsline);
$object->lines[$i]->fetch_optionals($object->lines[$i]->rowid,$extralabelsline);
</source>[[File:Add extrafields line in pdf 2.png|none|thumb]]
</source>[[File:Add extrafields line in pdf 2.png]]
*Find <source lang="php">$posYAfterDescription=$pdf->GetY();</source>
*Find <source lang="php">$posYAfterDescription=$pdf->GetY();</source>
*Add, just before, the code to display the line extrafiled <source lang="php">
*Add, just before, the code to display the line extrafiled <source lang="php">
$pdf->MultiCell(0, 3, $object->lines[$i]->array_options['options_my_line_extra'], 0, 'L', 0);
$pdf->MultiCell(0, 3, $object->lines[$i]->array_options['options_my_line_extra'], 0, 'L', 0);
</source>[[File:Add extrafields line in pdf 3.png|thumb]]
</source>[[File:Add extrafields line in pdf 3.png]]

Revision as of 11:37, 7 October 2019

This page give you some advises how to integrate complementary attributes (extrafields) into PDF models of Dolibarr.

This is a exemple and needs to be adapted to your needs. It is based on billing document but it will be the same for the others modules

Prerequisite

You can read the following links before, some paragraph will come from these pages :

Create a Complementary Attributes on Invoices Module

First you need to create your complementary attribute. This complementary attributes can be of two types :

  • Module complementary attribute
  • Line complementary attribute

Access to the configuration

Go on the Dolibarr application > Setup > Modules/Applications

Click on the parameter icon Cog.png of the Invoices module Then you can create Module or Line complementary attribute

Module complementary attribute

Go on the Complementary attributes (invoices) tab

Invoices module setup.png

Put the all the mandatory fields, especially the Attribute code that will be used in the next chapters

You should end up with something like that :

Invoices module setup Step 2.png

Line complementary attribute

Go on the Complementary attributes (lines) tab

Invoices module setup line.png

Put the all the mandatory fields, especially the Attribute code that will be used in the next chapters

You should end up with something like that :

Invoices module setup line Step 2.png

Verification on the Invoices Module

Clic on Billing|Payement and select New invoice

If you have created a Module complementary attribute, you should have that :

Invoices module extrafield.png

If you have created a Line complementary attribute, you should have that :

Invoices module line extrafield.png


Create a new invoice template

All the steps are describes there Create a PDF document template

  • Open the core\modules\facture\doc\ directory
  • Copy the pdf_crabe.modules.php
  • Rename the copy as pdf_my_template.modules.php
  • Edit and make the following changes in the code:
  1. Rename class pdf_crabe to class pdf_my_template
  2. Rename constant $this->name = "crabe"; to $this->name = "my_template";
  3. Update the $this->description with your description
  4. Save file. Now the template will be available in the list of models in Dolibarr
    Invoices module setup template.png
  5. Test this model (by generating a pdf) before going further ...

Modify the new invoice template

  • Open the new template pdf_my_template.modules.php
  • Look for the last require_one lines ate the beginning of the template
  • Add the line
    require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
    
    Add extrafields in pdf 1.png

Module complementary attribute

  • Find the
    function write_file
    
  • Just before the
    // Affiche notes
    
  • Add the code to load extrafield array in object
    $extrafields = new ExtraFields($db);
    $extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
    
  • Add the code to load extrafield into object
    $object->fetch($rowid);
    $object->fetch_optionals($rowid,$extralabels);
    
  • Add the code to print the extrafiled
    $pdf->writeHTMLCell (190,3, $this->posxdesc-1, $tab_top-5, $outputlangs->convToOutputCharset($object->array_options['options_my_extra']),0,1);
    
    Invoices module template Modification.png


Line complementary attribute

  • Find
    $object->fetch_thirdparty();
    
  • Add, just after, the code to load extrafield array in object
    $extrafields = new ExtraFields($db);
    $extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
    
    Add extrafields line in pdf 1.png
  • Find
    // Loop on each lines
    for ($i = 0; $i < $nblignes; $i++)
    {
    
  • Add, just after, the code to load line extrafield into object
    $object->lines[$i]->fetch_optionals($object->lines[$i]->rowid,$extralabelsline);
    
    Add extrafields line in pdf 2.png
  • Find
    $posYAfterDescription=$pdf->GetY();
    
  • Add, just before, the code to display the line extrafiled
    $pdf->MultiCell(0, 3, $object->lines[$i]->array_options['options_my_line_extra'], 0, 'L', 0);
    
    Add extrafields line in pdf 3.png