diff --git a/app/Filament/User/Resources/ProductResource/Pages/EditProduct.php b/app/Filament/User/Resources/ProductResource/Pages/EditProduct.php index 32d991b..5f48e7d 100644 --- a/app/Filament/User/Resources/ProductResource/Pages/EditProduct.php +++ b/app/Filament/User/Resources/ProductResource/Pages/EditProduct.php @@ -3,6 +3,7 @@ namespace App\Filament\User\Resources\ProductResource\Pages; use App\Filament\User\Resources\ProductResource; +use App\Models\ProductSize; use App\Models\Recipe; use Filament\Actions; use Filament\Resources\Pages\EditRecord; @@ -31,22 +32,38 @@ class EditProduct extends EditRecord protected function syncSizes(): void { - $product = $this->record; + $product = $this->record; + $incoming = collect($this->data['sizes'] ?? []); + $keepIds = []; - $sizes = collect($this->data['sizes'] ?? []) - ->mapWithKeys(function ($size) { - return [ - $size['packing_id'] => [ - 'description' => $size['description'] ?? null, - 'price' => $size['price'], - 'sku' => $size['sku'] ?? null, - 'gtin' => $size['gtin'] ?? null, - ], - ]; - }) - ->toArray(); + foreach ($incoming as $size) { + if (empty($size['packing_id'])) { + continue; + } - $product->sizes()->sync($sizes); + $gtin = preg_replace('/\D/', '', (string) ($size['gtin'] ?? '')); + + $ps = ProductSize::updateOrCreate( + [ + 'product_id' => $product->id, + 'packing_id' => (int) $size['packing_id'], + ], + [ + 'price' => $size['price'], + 'sku' => $size['sku'] ?: null, + 'gtin' => $gtin !== '' ? $gtin : null, + 'description' => $size['description'] ?? null, + ] + ); + + $keepIds[] = $ps->id; + } + + // Only delete local-only sizes (no shopify_variant_id) that were removed + ProductSize::where('product_id', $product->id) + ->whereNotIn('id', $keepIds) + ->whereNull('shopify_variant_id') + ->delete(); } protected function syncRecipe(): void