Der JTL-Connector für modified Shop wurde zwar offiziell abgekündigt, ist jedoch in vielen Projekten noch immer im produktiven Einsatz und kümmert sich um die Daten-Syncronisierung zwischen JTL-Wawi und modified Shop.
Ein bekanntes Problem: Startdatum bei Angeboten
In der Praxis zeigt sich ein seit langem bestehender Bug: Das Startdatum von Angeboten wird zwar korrekt aus JTL-Wawi an den Shop übertragen – der Connector speichert es jedoch nicht. Dadurch greifen zeitgesteuerte Sonderangebote oder Rabatte nicht wie vorgesehen sondern bereits am Tag der Eingabe.
Bugfix für das Startdatum
Da unsere Kunden davon ebenfalls betroffen sind, haben uns dem Problem möglichst effizient und pragmatisch angenommen. Mit folgendem Bugfix-Snippet lässt sich der Fehler beheben. Der Code prüft, ob das Startdatum vorhanden ist und in der Zukunft liegt und schreibt diese Änderung dann in die Datenbank.
jtlconnector/include.php
function cwShutdown(){
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/configure.php');
$db = new mysqli(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);
$arrData = json_decode($_POST['jtlrpc'], true);
if($arrData['method']=='product.push'){
foreach($arrData['params'] as $arrProdukt){
$strSku = strval($arrProdukt['sku']);
$strStartDate = date('Y-m-d', strtotime($arrProdukt['specialPrices'][0]['activeFromDate']));
$strEndDate = date('Y-m-d', strtotime($arrProdukt['specialPrices'][0]['activeUntilDate']));
if(!empty($strStartDate) && !empty($strEndDate) && !empty($strSku) && !strstr($strEndDate, '1970')){
$strSql = "UPDATE specials s JOIN products p USING(products_id)
SET s.start_date = '$strStartDate', s.date_status_change = NOW()
WHERE p.products_model = '$strSku' AND expires_date LIKE '$strEndDate%' ;";
$db->query($strSql);
}
}
}
}
register_shutdown_function('cwShutdown');