Dolibarr Verknüpftes Objekt

Hallo zusammen,
ich bin relativ neu im Dolibarr Forum und würde Hilfe beim aufsetzten eines Verknüpften Objekts benötigen.

Grundlegend möchte ich die Zolltarifnummer, welche ein „Ergänzendes Attribut“ eines Produkts ist, zu der Rechnungs-PDF hinzufügen.

Ich habe zahllose Foren durchforstet sowohl als auch jegliche diesbezügliche Dokumentationen durchgearbeitet. Leider bekomme ich es nicht hin, diese Nummer auf dem PDF anzuzeigen.

Ich bin soweit, das ich unter Ergänzende Attribute (Rechnung) ein Verknüpftes Objekt angelegt habe, und als Wert dann dementsprechend den default:
Product:product/class/product.class.php

In einer beliebigen Rechnung wird dann ein Feld (das Verknüpfte Objekt) angezeigt bei welchem ich ein entsprechendes Produkt auswählen kann. Aber mir würde es ja um ein Attribut dieses Produkts gehen. Wie kann ich den Wert entsprechend ändern um das Attribut mit dem Attribut-Code „gen_custcode“ ins PDF zu bekommen?

Die Dokumentation zur Sourcecode-Manipulation habe ich Schritt für Schritt befolgt, jedoch leider ohne Erfolg. Somit habe ich versucht anstatt der Extrafields ein Verknüpftes Objekt zu verwenden.

Falls ich mich unklar ausgedrückt oder etwas vergessen haben sollte, bitte ich vielmals um Rücksicht.

Ansonsten Vielen Dank schonmal im Voraus!

MFG
Nicolas Kumhofer

Welche Dolibarr Version verwendest du bzw. welche PDF Version?

und wie sieht dein ergänzendes Attribut aus? (Anzeige im PDF)

Dolibarr Version: 13.0.4
Die Version des PDF finde ich wo?

Anbei das ergänzende Attribut.

Danke für die Info:
Ich arbeite auf der Version 17 und dort gibt es neue Einstellungsmöglichkeiten.

hier nun einige Parameter bei den ergänzenten Attributen neu. ich würde dort 3 auswählen

Ich meinte PDF name des model z.B. crabe?
Summierbar meint das dies eine Gebühr in euro, Nummer?

Crabe, Sponge, eigenes PDF Template. All diese Vorlagen haben nicht funktioniert. Wenn ich das Objekt ohne Summierbar anlege, wird es automatisch angekreuzt.

Ja aber das Problem ist, dass das ein Extrafeld eines Produkts ist. Und ich somit das Produkt mit der Rechnung verbinden muss. Ich habe es über Extrafields versucht aber es hat nicht geklappt. Dann habe ich eine Funktion im Sourcecode eingefügt die eben genau das besagte tun soll, das hat aber auch nicht funktioniert und ich dachte, dass es eventuell eben über ein Verknüpftes Objekt gehen sollte.

Hallo, ich habe schon einige Extrafelder in verschiedenen PDF-Vorlagen eingefügt auch aus anderen Modulen.
Generell mache ich das immer mit neuen PDF-Vorlagen dann hat man weniger Ärger mit Updates.
Was mich wundert ist das es doch schon ein Feld „Zolltarifnummer“ in der llx_product gibt (customcode). Zumindest hier in Version 16.x.x
Wenn man sich das „sponge“ Template ansieht entdeckt man eine Stelle, wo für jedes Produkt geschaut wird ob es ein (Product-)Photo dazu gibt. Das sinngemäß duplizieren und später an geeigneter Stelle in den Output einfügen.

Hallo,
ja das ist richtig die Zolltarifnummer existiert bereits, da wir diese aber nur in der Rechnung anzeigen wollen, müssen wir diese im bei Angeboten ausblenden. Was auch über die Paramter MAIN_DOCUMENTS_HIDE_PRODUCT_DESCRIPTION_FOR***** funktioniert, jedoch benötigen wir in Angeboten andere Informationen welche in der Beschreibung enthalten sind.
Ich werde mir das mal ansehen mit dem „Product“-Photo und dann dementsprechend umgehend zurückmelden.
Vielen Dank schonmal!

Ich hab den besagten codepart nun gefunden, zumindest denke ich das.
Angenommen das Produkt hat das Attribut gen_custcode. Wie füge ich das zu dem Output hinzu?

So wie das für mich aussieht, müsste ich über das $object attribut über → lines dann irgendwie das Attribut mitliefern oder nicht?

Habe das eben mal ausprobiert:

  1. Definition einer globalen Conf-Variablen → MAIN_GENERATE_INVOICES_WITH_CUSTOMCODE

  2. Aktivieren der Variable in Setup->Erweiterte Einstellungen

  3. Definition einer neuen Spalte in pdf_sponge.php für PDF in der Funktion:
    „public function defineColumnField($object, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0)“

  • den folgenden Code nach der Definition von „desc“ einfügen:

      // CustomCode
      $rank = $rank + 10;
      $this->cols['customcode'] = array(
      	'rank' => $rank,
      	'width' => 20, // in mm
      	'status' => true,
      	'title' => array(
      		'textkey' => 'CustomCode'
      	),
      	'border-left' => true, // add left line separator
      );
    
  1. Änderungen in pdf_sponge.php (aber besser diese kopieren, umbenennen und die Änderung in der umbenannten Kopie machen)
  • Auslesen des Extrafeldes für jedes Produkt und Befüllen eines Arrays

      $CCarray = array();
      if (!empty($conf->global->MAIN_GENERATE_INVOICES_WITH_CUSTOMCODE)) {
      	$objCC = new Product($this->db);
      	for ($i = 0; $i < $nblines; $i++) {
      		if (empty($object->lines[$i]->fk_product)) {
      			continue;
      		}
      		$objCC->fetch($object->lines[$i]->fk_product);
      		$CCarray[$i] = $objCC->array_options['options_gen_custom'];
      	}
      }
    

  • Ausgabe des Arrays im PDF

      			// customcode
      			if ($this->getColumnStatus('customcode')) {
      				$this->printStdColumnContent($pdf, $curY, 'customcode', $CCarray[$i]); 
      				$nexY = max($pdf->GetY(), $nexY);
      			}
    
      			// VAT Rate
      			if ($this->getColumnStatus('vat')) {
    

Das PDF sieht dann in etwa so aus:

Hoffe das hilft weiter…

1 „Gefällt mir“

Habe ich noch vergessen:
„gen_custom“ umbenennen in den Namen deines Extrafeldes „gen_custcode“

Ich hab das ganze jetzt ausprobiert und das Feld wird im PDF angezeigt. Das Problem ist jedoch, dass die Werte nicht übernommen werden.
Ich denke das liegt daran, dass ich das „Auslesen des Extrafeldes für jedes Produkt und Befüllen eines Arrays“ nicht an der richtigen stelle eingefügt habe.

Könnten Sie mir eventuell mitteilen wo in der PDF Vorlage ich dies machen soll?

PS: Gibt es eine Möglichkeit das PDF Feld so anzupassen, dass die Zolltarifnummer ausgeschrieben ist, und nicht „er“ in einer neuen Zeile steht?

habe den Screenshot mal etwas ausgedehnt.
Die Zeilennummern können abweichen, aber als Anhaltspunkt dienen

Das Feld kann man größer machen steht in der Definition "width = …

grafik

Oder aber die deutsche Übersetzung von „CustomCode“ mit z.B. „Zolltarifnr.“ überschreiben

Vielen Dank! Jetzt hat es geklappt. Verstehe zwar nicht wieso es mit der offiziellen Anleitung nicht funktioniert hat, aber immerhin!

Eine Sache ist jetzt allerdings noch offen, das Ursprungsland welches wir zuvor ausgewählt haben, lässt sich nicht entfernen. Die Zolltarifnummer gibt man selbst ein somit kann man diese einfach löschen. Aber das Ursprungsland ist ja eine Liste aus welcher man auswählt und das leere Feld ganz oben akzeptiert er nicht und das Ursprungsland bleibt somit. Gibt es eine Möglichkeit dieses zu entfernen und im besten Fall unter der Zolltarifnummer anzugeben?

Ich mache das meist so dass ich etwas Reverse-Engineering betreibe wenn nicht auf den ersten Blick ersichtlich ist wer, wo, was ausgibt/speichert usw.
Also wenn was „komisches“ im PDF ausgegeben wird einfach mal im sponge ein var_dump($objekt); ausgeben lassen und die entsprechende Variable suchen.
Dann kann man mit den Möglichkeiten die PHP bietet das so bearbeiten bis es für deine Ansprüche passt.

Wie würde ich denn ein var_dump objekt ausgeben? Ich hab die PDF-vorlage nach var_dump durchsucht, aber gefunden hab ich dadurch nicht wirklich etwas. Und über die Dolibarr Oberfläche kann ich ja nicht das PDF-Template debuggen oder?

Das schreibst in das „sponge“ Template z.B.: in Zeile 248
→ var_dump($object);exit; (Anschliessend aber wieder entfernen :wink: )
Dann wird beim generieren des PDF’s mit dem sponge-Template ein Dump des Objects im Browser angezeigt.
Dies kannst Du dann nach der Variablen durchsuchen usw.

Also über die var_dump habe ich das object zwar gefunden aber dennoch fehlt mir da einfach die grundlegende PHP erfahrung um reverse engineering zu betreiben.

Zudem bin ich ehrlich gesagt nicht ganz zufrieden mit der Lösung eine eigene Spalte für Zolltarifnummer & Ursprungsland zu haben.
Gibt es nicht eine Möglichkeit eine neue Zeile in der Beschreibung einzufügen? Müsste ja ähnlich funktionieren wie eine Spalte?