Versandkosten

Die Aktion \Alvine\Application\Platform\Plugin\Shipping\Logic\Workflow\Action\Equipment\Order\Shippingcost berechnet die Versandkosten.

Regeln

  • es können sich mehrere Position für Versandkosten im Warenkorb befinden, wenn es im Vorfeld klar ist das die Bestellung mit mehreren Lieferungen versendet werden wird. Der Kunde muss von Anfang über die anfallenden Kosten informiert werden
  • es können mehrere Lieferkondionen auf einem Warenkorb gültig sein. Es muss eine manuell oder automatisch ausgewählt werden
  • wenn es Lieferkonditionen gibt sollte auch eine einer Bestellung zugewiesen werden , auch wenn es versandkostenfrei ist (ausser es ist falsch konfiguriert und es greift keine)
  • wenn mehrere Lieferkonditionen greifen kann die Gewichtung verwendet werden > je höher die Punktzahl vergeben wird, desto wichtiger ist diese

Factory

Die Factory erstellt die Strategy. Diese muss mit den nötigen Rahmenbedinungen gefüllt werden damit ein Context für die Strategie erstellt werden kann. - Positionen im Warenkorb / in der Bestellung -

Bestellcontext

Ob der Rahmen der Versandkostenberechung innerhalb einer Bestellung passiert wird in der Factory definiert.

Context

Als erstes muss ein Context deiniert werden, das Lieferland wird aus der Lieferadresse des Equipments \Alvine\Application\Platform\Plugin\Commerce\Logic\Workflow\Container\Equipment\Account\MutableAddress oder von der Juristication bezogen wenn das nicht definiert wurde.

$contextBuilder = new \Alvine\Application\Platform\Plugin\Shipping\Condition\Context\Builder(\Alvine\Application\Platform\Plugin\Shipping\Condition\Context::class);
        $contextBuilder->setDeliveryCountry($deliveryCountry);

wird eine OID zugewiesen , die Strategy

Positionen

Um die Versandkosten zu berechnen müssen die Positionen geladen sein , dise müssen sich im Equipment \Alvine\Application\Platform\Plugin\Order\Logic\Workflow\Container\Equipment\Order\VolatilePositions befinden.

Manager

Der Manager bekommt den Context und die aktuellen Positionen.
Dieser kann dann mit calc() Versandpositionen erstellen.

Hier wird calc aus der Strategie aufgerufen.

$strategyFactory->createConditionStrategy()->calc()->getResultCollection();

Es wird eine Collection von \Alvine\Application\Platform\Plugin\Shipping\Logic\Condition\Strategy\Result Objekten zurück geliefert. über dieses Result Objekt wird die DCID, Positionen die angelegt oder gelöscht werden sollen definiert.

Die aktuell gültige DCID wird im Equipment \Alvine\Application\Platform\Plugin\Order\Logic\Workflow\Container\Equipment\MutableOrder\ShippingDCID gespeichert.

Logik

Über die Komponente wird die Klasse der Factory bezogen.
Diese erstellt die Strategie für die Berechnung der Versandkosten

$factoryClass = \Alvine\Application\Platform\Plugin\Shipping\Component::getInstance()->getConditionStrategyFactoryClass();

Versandpositionen

Diese Positionen haben die Eigenschaft additional.type mit dem Wert shippingcost