Loading...
Navigation überspringen
Bitte beachte, dass sich diese Dokumentation auf die neuste Version dieser Erweiterung bezieht. Wenn eine ältere Version eingesetzt wird, kann diese abweichen. Die jeweils passende Dokumentation befindet sich im Dokumentation-Verzeichnis der Erweiterung.

Verwendung eines eigenen PriceCalculation-Service

Oft kann es vorkommen, dasw Du ganz spezielle Regeln für Deine Preisberechnung benötigst. Daher ist es mit der Buchungserweiterung möglich, einen eigenen Preisberechnungs-Service zu verwenden. Wie dies funktioniert, kannst Du im Folgenden lesen.

In diesem Beispiel wollen wir ein Zimmer vermieten, dass zwischen Sonntag- und Freitagnacht 134€ kostet und zwischen Freitag- und Sonntagnacht 154€. Wenn eine Buchung bspw. von Mittwoch bis Sonntag geht, soll immer der kleinere Preis genommen werden. Diese Berechnung findest Du im Price Calculation: Weekend Overnights.

Vorbereitung und Registrierung des Service

Der eigene Service muss die abstrakte Klasse AbstractPriceCalculationService implementieren. Diesen Service kannst Du in einer eigenen Erweiterung ablegen und würde grundsätzlich wie folgt aussehen:

namespace CodingMs\Bookings\Service;
use CodingMs\Bookings\Domain\Model\BookingObject;
class PriceCalculationExampleService extends AbstractPriceCalculationService
{

    /**
     * @param BookingObject $bookingObject
     * @param array $data
     * @return array
     */
    public function calculate($bookingObject, $data): array
    {
        $calculation = $this->prepareData($bookingObject, $data);

        // ...

        return $calculation;
    }

}

Der vorbereitete Service muss dann im System registriert werden. Dies machen wir mit einem TCA-Override. Dazu legen wir eine Datei mit dem Namen tx_bookings_domain_model_bookingobject.php in das Verzeichnis Configuration/TCA/Overrides/ unserer Erweiterung. Du musst die Datei natürlich in Deine Erweiterung/Theme legen. Wichtig ist nur, dass diese geladen wird und den folgenden Inhalt erhält:

<?php
if (!defined('TYPO3')) {
    die ('Access denied.');
}

$GLOBALS['TCA']['tx_bookings_domain_model_bookingobject']['columns']['record_type']['config']['items'][] =
    ['Price Calculation: Weekend Overnights', '\CodingMs\Bookings\Service\PriceCalculationWeekendOvernightsService'];

// Display Fields
$extKey = 'bookings';
$table = 'tx_bookings_domain_model_bookingobject';
$lll = 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table;
$GLOBALS['TCA']['tx_bookings_domain_model_bookingobject']['types']['\CodingMs\Bookings\Service\PriceCalculationWeekendOvernightsService'] = [
    'showitem' => 'title,
        subtitle,
        --palette--;' . $lll . '.palette_min_max_persons;min_max_persons_children_selection,
        --palette--;' . $lll . '.palette_min_max_days;min_max_days,
        description,

    --div--;' . $lll . '.tab_relations,
        tags,
        categories,
        images,

    --div--;' . $lll . '.tab_bookings,
        booking_persons_required,
        bookings,

    --div--;' . $lll . '.tab_prices,
        record_type,
        record_type_information,
        currency,
        price_per_overnight,
        price_per_overnight_per_additional_person,
        additional_prices,
        payment_notices,

    --div--;' . $lll . '.tab_map,
        --palette--;' . $lll . '.palette_map_latitude_longitude;map_latitude_longitude,
        map_zoom,

    --div--;' . $lll . '.tab_language,
        sys_language_uid,
        l10n_parent,
        l10n_diffsource,

    --div--;' . $lll . '.tab_access,
        hidden,
        starttime,
        endtime',
];

Hier fügst Du Deinem Calculation-Service der Auswahl hinzu. Der Namespace und die Klasse muss natürlich mit Deinem Namen angepasst werden. Nach dem Leeren des System-Cache sollte die neue Auswahl zur Verfügung stehen.

Im Bereich showitem kannst Du festlegen, welche Felder für Deinem Service angezeigt werden.

Wähle diese in einem Buchungsobjekt aus, so dass Du diese testen kannst.

Ausgabe der Berechnungstabelle

Der AJAX-Service lässt seine Daten über Ihren Preisberechnungs-Service berechnen und übergibt das Ergebnis dann an das hinterlegte Fluid-Template, welches dann das HTML rendert das zurückgegeben wird. Hier bei wird das Fluid Partial EXT:bookings/Resources/Private/Partials/Bookings/PriceCalculation.html verwendet. Dieses kannst Du wie gewohnt mit Hilfe von TypoScript überschreiben.

Somit bist Du selbst bei der Ausgabe Deiner Kalkulation maximal flexibel.

Fehler-Behandlung

-> Einfach eine Exception werfen!

Kontaktanfrage

Du kannst uns jederzeit kontaktieren

Stop! Playing in the meantime?
Stop! Playing in the meantime?
Stop! Playing in the meantime?

Stop! Playing in the meantime?

Break the highscore

Press Start
Contact request
Screenreader label
Security question
JAD_________ZU7______
__B____4____S_T___N7P
4QW___Z1G___OZ8______
Q______U____D_9___6TO
H1O_________ORH______