Preisberechnung anhand Konfiguratoroptionen

Hallo,

ich habe einen Kunden der Möbel in verschiedenen Größen verkauft. Allerdings habe ich derzeit Probleme mit der Preisberechnung.

die Möbel lassen sich wie folgt konfigurieren:

  • Anzahl der Abtiele: 1-5
  • Abteilbreite: 8 Auswahlmöglichkeiten
  • Farben für Tür und Korpuis: je 10+ Auswahlmöglichkeiten
  • Beschläge: 4+ Varianten

Das Problem gestaltet sich nun wie folgt:

Die Preise für die Abteilbreite ergeben sich aus der [Anzahl der Abteile] mal [Faktor X].
Die Preise für die Beschläge ergeben sich aus [Anzahl der Abteile] mal [Faktor Y: Türen pro Abteil]  mal [Faktor Z: Preis pro Beschlag]
Es wäre günstig, wenn sich auch die Preise für die Farben in Abhängigkeit von der Abteilanzahl modellieren ließen.

Um die Anzahl an Varianten geringer zu halten sind wir derzeit bzgl. der Farben auf Custom Products ausgewichen.

Lässt sich die Preisberechnung nach dem Schema oben irgendwie automatisch handhaben (gerne auch per Plugin). Bei der Fülle an Varianten ist es praktisch unmöglich das manuell einzutragen.

Bonusfrage: Anhand der Abteile ändern sich natürlich auch die Maße, die auch im Template angezeigt werden. Gibt es hier eine Chance diese direkt zu manipulieren ohne auf JS zurückzugreifen?

Ich bin für jede Hilfe dankbar.

Hallo,
im prinzip braucht es eine Implementierung von des PriceCalculationServiceInterface. Dort wird dann der Preis auf der Basis der Werte berechnet. Mittels DI wird der Original-Service dann “dekoriert”.

Bei Bedarf kurz via PM melden.

Für die Übergabe in den Details View; hier ein Code-Snipple:

    /**
     * @inheritdoc
     */
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch' => 'onPostDispatchDetail'
        ];
    }

    /**
     *
     * @param \Enlight_Event_EventArgs $args
     */
    public function onPostDispatchDetail(\Enlight_Event_EventArgs $args) 
    {
        $view = $args->getSubject()->View();
        $request = $args->getSubject()->Request();
        if ($request->getControllerName() == 'detail') {
	        $view->assign("extra_data", 4711);
        }
    }

 

Carsten

ebd.digital