diff --git a/src/Controller/ProductSkusController.php b/src/Controller/ProductSkusController.php index 2f17ce0..e862198 100644 --- a/src/Controller/ProductSkusController.php +++ b/src/Controller/ProductSkusController.php @@ -82,7 +82,7 @@ class ProductSkusController extends AppController $existingProductSkusForMapping = Hash::combine($product->product_skus ?? [], '{n}.id', '{n}.product_sku_variant_values'); $existingSkusForCartesianComparison = []; foreach ($existingProductSkusForMapping as $existingProductSkuId => $existingProductSku) { - $existingSkusForCartesianComparison[$existingProductSkuId] = Hash::combine($existingProductSku, '{n}.product_category_variant_id', '{n}.product_category_variant_option_id'); + $existingSkusForCartesianComparison[$existingProductSkuId] = Hash::combine($existingProductSku, '{n}.product_variant_id', '{n}.product_category_variant_option_id'); } $productVariants = isset($product->product_variants) ? $product->product_variants : []; // dd($productVariants); @@ -97,7 +97,7 @@ class ProductSkusController extends AppController foreach ($productCategoryVariants as $productCategoryVariant) { $options = Hash::extract($productCategoryVariant['product_category_variant_options'] ?? [], '{n}.id'); - $toGetCartesianProductsFrom[$productCategoryVariant['id']] = $options; + $toGetCartesianProductsFrom[$productVariantsMapping[$productCategoryVariant['id']]] = $options; } // dd($toGetCartesianProductsFrom); @@ -109,6 +109,7 @@ class ProductSkusController extends AppController 'product', 'productSkus', 'productCategoryVariants', + 'productVariantsMapping', 'toGetCartesianProductsFrom', 'optionMapping', 'variantNameMapping', diff --git a/src/Controller/ProductVariantsController.php b/src/Controller/ProductVariantsController.php new file mode 100644 index 0000000..233864b --- /dev/null +++ b/src/Controller/ProductVariantsController.php @@ -0,0 +1,119 @@ +ProductVariants->find() + ->contain(['ProductCategoryVariants', 'Products']); + $productVariants = $this->paginate($query); + + $this->set(compact('productVariants')); + } + + /** + * View method + * + * @param string|null $id Product Variant id. + * @return \Cake\Http\Response|null|void Renders view + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function view($id = null) + { + $productVariant = $this->ProductVariants->get($id, contain: ['ProductCategoryVariants', 'Products']); + $this->set(compact('productVariant')); + } + + /** + * Add method + * + * @return \Cake\Http\Response|null|void Redirects on successful add, renders view otherwise. + */ + public function add($productId) + { + $product = $this->ProductVariants->Products->get($productId); + $productVariant = $this->ProductVariants->newEmptyEntity(); + if ($this->request->is('post')) { + $saveOptions = []; + $postData = $this->request->getData(); + $productCategoryVariant = $this->ProductVariants->ProductCategoryVariants->get($this->request->getData('product_category_variant_id', '-1')); + $postData['name'] = $productCategoryVariant->name; + $postData['product_id'] = $productId; + $productVariant = $this->ProductVariants->patchEntity($productVariant, $postData); + if ($this->ProductVariants->save($productVariant)) { + $this->Flash->success(__('The product variant has been saved.')); + + return $this->redirect(['action' => 'index']); + } + + Log::debug(print_r('$productVariant->getErrors()', true)); + Log::debug(print_r($productVariant->getErrors(), true)); + $this->Flash->error(__('The product variant could not be saved. Please, try again.')); + } + $productCategoryVariants = $this->ProductVariants->ProductCategoryVariants + ->find('list', limit: 200) + ->where(['product_category_id' => $product->product_category_id]) + ->toArray(); + $this->set(compact('productVariant', 'productCategoryVariants', 'product')); + } + + /** + * Edit method + * + * @param string|null $id Product Variant id. + * @return \Cake\Http\Response|null|void Redirects on successful edit, renders view otherwise. + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function edit($id = null) + { + $productVariant = $this->ProductVariants->get($id, contain: []); + if ($this->request->is(['patch', 'post', 'put'])) { + $productVariant = $this->ProductVariants->patchEntity($productVariant, $this->request->getData()); + if ($this->ProductVariants->save($productVariant)) { + $this->Flash->success(__('The product variant has been saved.')); + + return $this->redirect(['action' => 'index']); + } + $this->Flash->error(__('The product variant could not be saved. Please, try again.')); + } + $productCategoryVariants = $this->ProductVariants->ProductCategoryVariants->find('list', limit: 200)->all(); + $products = $this->ProductVariants->Products->find('list', limit: 200)->all(); + $this->set(compact('productVariant', 'productCategoryVariants', 'products')); + } + + /** + * Delete method + * + * @param string|null $id Product Variant id. + * @return \Cake\Http\Response|null Redirects to index. + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function delete($id = null) + { + $this->request->allowMethod(['post', 'delete']); + $productVariant = $this->ProductVariants->get($id); + if ($this->ProductVariants->delete($productVariant)) { + $this->Flash->success(__('The product variant has been deleted.')); + } else { + $this->Flash->error(__('The product variant could not be deleted. Please, try again.')); + } + + return $this->redirect(['action' => 'index']); + } +} diff --git a/templates/ProductSkus/add.php b/templates/ProductSkus/add.php index 994aefd..9d0ef10 100644 --- a/templates/ProductSkus/add.php +++ b/templates/ProductSkus/add.php @@ -1,13 +1,12 @@