Dokument Variablen Rechnung

Hallo zusammen,
ich versuche seit mehreren Tagen das Artikelgewicht in der Rechnung darzustellen. Die mir bekannten Variablen funktionieren leider nicht mehr.
Haben sich diese geändert?

Zudem würde ich gerne noch Zusatzfelder ausgeben. Vielleicht kann hier jemand helfen.

Vielen Dank.

MFG
Jo

Hallo Tuntrarider,

wenn du in deinem eigenen Theme ein Dokumententemplate angelegt hast, kannst du über
{{ lineItem|json_encode(constant(‚JSON_PRETTY_PRINT‘)) }}
die verfügbaren Variablen anzeigen lassen.

Zusatzfelder kannst du mit {{ lineItem.payload.customFields.NAME_DES_ZUSATZFELDES }} ausgeben.

Das Gewicht steht im Standard in der Rechnung nicht zur Verfügung.
Über ein kleines Plugin kannst du das Gewicht dem Payload hinzufügen.

Dafür ein Subscriber anlegen und die service.xml nicht vergessen

use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;

class LineItemSubscriber implements EventSubscriberInterface
{
    private $productRepository;
    private $requestStack;

    public function __construct(EntityRepository $productRepository, RequestStack $requestStack)  {
        $this->productRepository = $productRepository;
        $this->requestStack = $requestStack;
    }

    public static function getSubscribedEvents()
    {
        return [
            BeforeLineItemAddedEvent::class => 'beforeLineItemAdded',
        ];
    }

    /**
     * @param BeforeLineItemAddedEvent $event
     * @throws \Shopware\Core\Checkout\Cart\Exception\InvalidPayloadException
     */
    public function beforeLineItemAdded(BeforeLineItemAddedEvent $event)
    {
        $lineItem = $event->getLineItem();


        if ($lineItem->getType() == "product") {
            foreach ($this->requestStack->getCurrentRequest()->get('lineItems') as $key => $item) {
                if ($lineItem->getId() == $key) {
                    $criteria = new Criteria();
                    $criteria->addFilter(new EqualsFilter('id', $lineItem->getId()));
                    $product = $this->productRepository->search($criteria, Context::createDefaultContext())->first();
                    $lineItem->setPayloadValue('weight', $product->getWeight());
                }
            }
        }
    }
}

service.xml

<services>
      <service id="NAMESPACE\LineItemSubscriber">
          <argument id="product.repository" type="service" />
          <argument id="request_stack" type="service" />
          <tag name="kernel.event_subscriber"/>
      </service>
  </services>

Danach kannst du im Dokumententemplate über {{ lineItem.payload.weight }} auf den Value zugreifen

2 „Gefällt mir“

Grüß dich,

spitze! Vielen Dank, das hat mir noch gefehlt. Wobei ich diese beiden Variablen schon mal hatte. Als Hinweis für alle: Wenn man die Felder testen möchte, reicht es nicht vorhandene Bestellungen mit entsprechenden Positionen sich generieren zu lassen.
Man muss eine komplett neue Bestellung auslösen, dann sind auch die Zusatzfelder zu sehen.

Zum Plugin melde ich mich später nochmal.

Vielen Dank für Deine Unterstützung :pray:

MFG
Jo

Guten Morgen,

auch das mit dem Plugin hat geklappt.

Musste vor der foreach-Schleife noch diese Zeile ergänzen, sonst kommt es beim Checkout zu einem 500er, weil die Schleife vermutlich mit dem falschen Argument aufgerufen wird (Array, Objekt), das Argument ist aber vom Typ NULL.

Jetzt wird zunächst überprüft, ob $lineItems nicht null ist und ob es ein Array ist, bevor es die foreach -Schleife durchläuft.

$lineItems = $this->requestStack->getCurrentRequest()->get('lineItems');

if ($lineItems !== null && is_array($lineItems)) {
    foreach ($lineItems as $key => $item) {
        // ...
    }
}

Das wars aber auch schon. Vielen, vielen Dank nochmal für deinen Denkanstoß. Ich steige gerade erst in die SW6 Plugin Entwicklung ein.

Schönen Tag zusammen.

LG
Jo

1 „Gefällt mir“

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.