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