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, 'size' => 40,
'info' => 'optional, int64' 'info' => 'optional, int64'
], ],
'category_identifier_source' => [ /* 'category_identifier_source' => [
'typ' => 'select', 'typ' => 'select',
'bezeichnung' => '{|Kategorie-Identifizierer|}:', 'bezeichnung' => '{|Kategorie-Identifizierer|}:',
'size' => 40, 'size' => 40,
@ -89,34 +89,15 @@ class Shopimporter_Mirakl extends ShopimporterBase {
'size' => 40, 'size' => 40,
'info' => 'Wenn oben Freifeld oder Eigenschaft gewählt wurde' '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' => [ 'product_field_map' => [
'typ' => 'textarea', 'typ' => 'textarea',
'bezeichnung' => '{|Zuordnung Produkt-Felder je Kategorie (JSON)|}:', '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' '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' => [ 'offer_field_map' => [
'typ' => 'textarea', 'typ' => 'textarea',
'bezeichnung' => '{|Zuordnung Angebots-Felder je Kategorie (JSON)|}:', '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' => [ 'steuergruppen' => [
@ -310,45 +291,57 @@ class Shopimporter_Mirakl extends ShopimporterBase {
$additional_fields = array(); $additional_fields = array();
// Required attributes // 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( $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', // ?!?! 'state_code' => '11', // ?!?!
'update_delete' => null // Update delete flag. Could be empty (means "update"), "update" or "delete". '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) { 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 (!is_array($offer_field_source)) {
if (!isset($article[$offer_field_source])) { $offer_field_source = array('feld' => $offer_field_source);
throw new Exception("Artikelfeld \"".$offer_field_source."\" nicht vorhanden."); }
}
$offer_field_value = $article[$offer_field_source];
} else {
$is_additional_field = false; $offer_field_value = null;
$is_additional_field = false;
foreach ($offer_field_source as $key => $value) { foreach ($offer_field_source as $key => $value) {
switch ($key) { switch ($key) {
case 'freifeld': case 'feld':
// TBD $offer_field_value = $article[$value];
break; break;
case 'eigenschaft': 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";
break; $offer_field_value = $this->app->DB->Select($sql);
case 'wert': break;
$offer_field_value = $value; case 'wert':
break; $offer_field_value = $value;
case 'zusatzfeld': break;
$is_additional_field = $value; case 'zusatzfeld':
break; $is_additional_field = $value;
} break;
} }
} }