mirakl required fields

This commit is contained in:
OpenXE 2024-05-22 13:37:30 +02:00
parent f479a12c84
commit 365b87f734

View File

@ -76,7 +76,7 @@ class Shopimporter_Mirakl extends ShopimporterBase {
'size' => 40,
'info' => 'optional, int64'
],
'category_identifier_source' => [
/* 'category_identifier_source' => [
'typ' => 'select',
'bezeichnung' => '{|Kategorie-Identifizierer|}:',
'size' => 40,
@ -89,34 +89,15 @@ class Shopimporter_Mirakl extends ShopimporterBase {
'size' => 40,
'info' => 'Wenn oben Freifeld oder Eigenschaft gewählt wurde'
],
'product_identifier_type' => [
'typ' => 'text',
'bezeichnung' => '{|Produkt-Identifizierertyp in Mirakl|}:',
'size' => 40,
'info' => 'Z.B. EAN'
],
'product_identifier_source' => [
'typ' => 'select',
'bezeichnung' => '{|Produkt-Identifizierer|}:',
'size' => 40,
'optionen' => ['Artikelnummer' => '{|Artikelnummer|}', 'Herstellernummer' => '{|Herstellernummer|}', 'EAN' => '{|EAN|}', 'Freifeld' => 'Freifeld', 'Eigenschaft' => 'Eigenschaft'],
'info' => 'Feld in OpenXE für die Zuordnung der Artikel zu den Katalogprodukten in Mirakl'
],
'product_identifier_source_field' => [
'typ' => 'text',
'bezeichnung' => '{|Produkt-Identifizierer Freifeld oder Eigenschaft|}:',
'size' => 40,
'info' => 'Wenn oben Freifeld oder Eigenschaft gewählt wurde'
],
'product_field_map' => [
'typ' => 'textarea',
'bezeichnung' => '{|Zuordnung Produkt-Felder je Kategorie (JSON)|}:',
'info' => 'Die Felder werden vom Mirakl-Betreiber vorgegeben. Mögliche Zuordnungen aus OpenXE sind: Artikelnummer, Artikelname, Einheit, Hersteller, Herstellernummer, EAN oder eine konkrete Artikeleigenschaft'
],
],*/
'offer_field_map' => [
'typ' => 'textarea',
'bezeichnung' => '{|Zuordnung Angebots-Felder je Kategorie (JSON)|}:',
'info' => 'Die Felder werden vom Mirakl-Betreiber vorgegeben. Mögliche Zuordnungen aus OpenXE sind: nummer, name_de, einheit, hersteller, herstellernummer, ean u.v.m. Freifelder: {"freifeld": "Freifeld1-40"}, Eigenschaften: {"eigenschaft": "Eigenschaftenname xyz"}, Fester Wert: {"wert": "xyz"}, Zusatzfelder zusätzlich mit der Eigenschaft "zusatzfeld": true versehen: z.B. {"freifeld": "Freifeld1", "zusatzfeld": true}'
'info' => 'Die Felder werden vom Mirakl-Betreiber vorgegeben. Zuordnung über "Mirakl-xyz": {"feld": "xyz"} oder kurz "Mirakl-xyz": "xyz" Mögliche Zuordnungen aus OpenXE sind: nummer, name_de, einheit, hersteller, herstellernummer, ean u.v.m. Freifelder wie im Reiter Freifelder mit Präfix \'freifeld_\', Eigenschaften: {"eigenschaft": "Eigenschaftenname xyz"}, Fester Wert: {"wert": "xyz"}, Zusatzfelder zusätzlich mit der Eigenschaft "zusatzfeld": true versehen: z.B. {"feld": "name_de", "zusatzfeld": true}'
],
/*
'steuergruppen' => [
@ -310,37 +291,50 @@ class Shopimporter_Mirakl extends ShopimporterBase {
$additional_fields = array();
// Required attributes
$required = [
'product_id_type',
'product_id',
'shop_sku',
'price'
];
$missing = null;
foreach ($required as $key) {
if (!isset($this->offer_field_map[$key])) {
$missing[] = $key;
}
}
if ($missing) {
return(array('status' => false, 'message' => "Missing required field: ".implode(', ',$missing)));
}
$offer_for_mirakl = array(
'product_id_type' => $this->product_identifier_type,
'product_id' => $article['nummer'], // TBD
'shop_sku' => $article['nummer'], // TBD
'price' => $article['preis'],
'state_code' => '11', // ?!?!
'update_delete' => null // Update delete flag. Could be empty (means "update"), "update" or "delete".
);
// print_r($this->offer_field_map);
foreach ($this->offer_field_map as $offer_field => $offer_field_source) {
$offer_field_value = null;
print_r($this->offer_field_map);
if (!is_array($offer_field_source)) {
if (!isset($article[$offer_field_source])) {
throw new Exception("Artikelfeld \"".$offer_field_source."\" nicht vorhanden.");
$offer_field_source = array('feld' => $offer_field_source);
}
$offer_field_value = $article[$offer_field_source];
} else {
$offer_field_value = null;
$is_additional_field = false;
foreach ($offer_field_source as $key => $value) {
switch ($key) {
case 'freifeld':
// TBD
case 'feld':
$offer_field_value = $article[$value];
break;
case 'eigenschaft':
// TBD
$sql = "SELECT wert FROM artikeleigenschaften ae INNER JOIN artikeleigenschaftenwerte aew ON aew.artikeleigenschaften = ae.id WHERE aew.artikel = '".$article['artikelid']."' AND ae.name = '".$value."' LIMIT 1";
$offer_field_value = $this->app->DB->Select($sql);
break;
case 'wert':
$offer_field_value = $value;
@ -350,7 +344,6 @@ class Shopimporter_Mirakl extends ShopimporterBase {
break;
}
}
}
if ($is_additional_field) {
$additional_field = array (