From 4549f30930a3a6f0894a6b425c2a7e41ede1ced5 Mon Sep 17 00:00:00 2001 From: Brandon Shipley Date: Fri, 19 Sep 2025 23:44:18 -0700 Subject: [PATCH] product attributes add/edit --- src/Controller/ProductsController.php | 51 ++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/src/Controller/ProductsController.php b/src/Controller/ProductsController.php index 3b1b63b..410dc94 100644 --- a/src/Controller/ProductsController.php +++ b/src/Controller/ProductsController.php @@ -78,10 +78,52 @@ class ProductsController extends AppController $saveOptions = [ 'associated' => ['ProductAttributes'], ]; -// Log::debug(print_r('$postData', true)); -// Log::debug(print_r($postData, true)); -// Log::debug(print_r('$saveOptions', true)); -// Log::debug(print_r($saveOptions, true)); + Log::debug(print_r('$postData', true)); + Log::debug(print_r($postData, true)); + Log::debug(print_r('$saveOptions', true)); + Log::debug(print_r($saveOptions, true)); + $productVariantsData = []; + if (isset($postData['product_variants']) && $postData['product_variants']) { + foreach ($postData['product_variants'] as $postedProductVariant) { + if (!isset($postedProductVariant['enabled']) || !$postedProductVariant['enabled'] || !isset($postedProductVariant['product_category_variant_id'])) { + continue; + } + $existingVariant = $this->Products->ProductCategories->ProductCategoryVariants->get($postedProductVariant['product_category_variant_id'], contain: ['ProductCategoryVariantOptions']); + $optionsData = []; + foreach ($existingVariant->product_category_variant_options as $existingOption) { + $optionsData[] = [ + 'variant_value' => $existingOption->variant_value, + 'variant_label' => $existingOption->variant_label ?? null, + 'enabled' => $existingOption->enabled, + ]; + } + $tmpVariantData = [ + 'name' => $existingVariant->name, + 'product_category_variant_id' => $postedProductVariant['product_category_variant_id'], + 'enabled' => true, + 'product_category_variant_options' => $optionsData, + ]; + $productVariantsData[] = $tmpVariantData; + } + } + if ($productVariantsData) { + $saveOptions['fields'] = [ + 'name', + 'product_category_id', + 'product_type_id', + 'product_attributes', + 'product_category_variants' + ]; + $saveOptions['associated']['ProductCategoryVariants'] = [ + 'fields' => [ + 'name', + 'enabled', + 'product_category_variant_options', + ] + ]; + $saveOptions['associated'][] = 'ProductCategoryVariants.ProductCategoryVariantOptions'; + $postData['product_category_variants'] = $productVariantsData; + } $product = $productsTable->patchEntity($product, $postData, $saveOptions); if ($productsTable->save($product, $saveOptions)) { $this->Flash->success(__('The product has been saved.')); @@ -129,7 +171,6 @@ class ProductsController extends AppController $productCategory = $product->product_category_id ? $productsTable->ProductCategories->find()->where(['internal_id' => $product->product_category_id])->first() : null; $productCatalogs = $productsTable->ProductCategories->ProductCatalogs->find('list')->toArray(); $this->set(compact('product', 'productCatalogs', 'productCategory')); - } /**