diff --git a/app/Console/Commands/ShopifyImport.php b/app/Console/Commands/ShopifyImport.php index b79d3b3..94d3787 100644 --- a/app/Console/Commands/ShopifyImport.php +++ b/app/Console/Commands/ShopifyImport.php @@ -33,21 +33,22 @@ class ShopifyImport extends Command foreach ($variants as $variant) { $packingRaw = $variant['option1']; - // Format: "Standbodenbeutel 100 g" oder "Metalldose 40 g" - if (! preg_match('/^(.+?)\s+(\d+(?:[.,]\d+)?)\s*g$/i', $packingRaw, $m)) { + $parsed = $this->parsePacking($packingRaw, $variant['sku']); + + if ($parsed === null) { $this->warn(" ⚠ Verpackungsformat nicht erkannt: '{$packingRaw}' ({$variant['sku']}) – übersprungen"); $stats['skipped']++; continue; } if ($dryRun) { - $this->line(" {$variant['product_title']} | {$packingRaw} | SKU {$variant['sku']} | Bestand {$variant['inventory_quantity']}"); + $this->line(" {$variant['product_title']} | {$parsed['name']} {$parsed['size']} | SKU {$variant['sku']} | Bestand {$variant['inventory_quantity']}"); continue; } $packing = Packing::firstOrCreate([ - 'name' => trim($m[1]), - 'size' => (float) str_replace(',', '.', $m[2]), + 'name' => $parsed['name'], + 'size' => $parsed['size'], ]); $product = Product::firstOrCreate( @@ -100,4 +101,30 @@ class ShopifyImport extends Command return self::SUCCESS; } + + private function parsePacking(string $option, string $sku): ?array + { + // "Standbodenbeutel 100 g" / "Metalldose 40 g" + if (preg_match('/^(.+?)\s+(\d+(?:[.,]\d+)?)\s*g$/i', $option, $m)) { + return ['name' => trim($m[1]), 'size' => (float) str_replace(',', '.', $m[2])]; + } + + // "Metalldose 5 Stück" / "Standbodenbeutel 3 Stück" + if (preg_match('/^(.+?)\s+(\d+)\s*Stück$/i', $option, $m)) { + return ['name' => trim($m[1]) . ' (Stück)', 'size' => (float) $m[2]]; + } + + // "1 Stange" / "3 Stangen" / "5 Stangen" + if (preg_match('/^(\d+)\s*Stangen?$/i', $option, $m)) { + return ['name' => 'Stangen', 'size' => (float) $m[1]]; + } + + // "Default Title" — Verpackung aus SKU ableiten: z.B. GWM-AAS-100SB → 100g Standbodenbeutel + if ($option === 'Default Title' && preg_match('/(\d+)(SB|MD|GT|BB)$/i', $sku, $m)) { + $names = ['SB' => 'Standbodenbeutel', 'MD' => 'Metalldose', 'GT' => 'Glas', 'BB' => 'Beutel']; + return ['name' => $names[strtoupper($m[2])], 'size' => (float) $m[1]]; + } + + return null; + } }