From ef74d42ff6ccc5ee05cb8103eb7cc9151a7a26a4 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Wed, 11 Nov 2020 19:49:22 +0530 Subject: [PATCH 1/3] Product Number To Copy Added --- .../src/Repositories/ProductRepository.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/Webkul/Product/src/Repositories/ProductRepository.php b/packages/Webkul/Product/src/Repositories/ProductRepository.php index 53559b2a6..a08f7374a 100755 --- a/packages/Webkul/Product/src/Repositories/ProductRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductRepository.php @@ -122,8 +122,8 @@ class ProductRepository extends Repository if ($categoryId) { $qb->where('product_categories.category_id', $categoryId); - } - + } + return $qb->get(); } @@ -334,7 +334,7 @@ class ProductRepository extends Repository */ public function getNewProducts() { - $count = core()->getConfigData('catalog.products.homepage.no_of_new_product_homepage'); + $count = core()->getConfigData('catalog.products.homepage.no_of_new_product_homepage'); $results = app(ProductFlatRepository::class)->scopeQuery(function ($query) { $channel = request()->get('channel') ?: (core()->getCurrentChannelCode() ?: core()->getDefaultChannelCode()); @@ -614,7 +614,7 @@ class ProductRepository extends Repository { $ids = []; - foreach (['name', 'sku', 'status', 'url_key'] as $code) { + foreach (['name', 'sku', 'product_number', 'status', 'url_key'] as $code) { $ids[$code] = Attribute::query()->where(['code' => $code])->firstOrFail()->id; } @@ -675,6 +675,18 @@ class ProductRepository extends Repository $newProductFlat->sku = $copiedProduct->sku; } + // change product number + if ($oldValue->attribute_id === $attributeIds['product_number']) { + $copyProductNumber = trans('admin::app.copy-of-slug'); + $copiedProductNumber = sprintf('%s%s-%s', + Str::startsWith($originalProduct->product_number, $copyProductNumber) ? '' : $copyProductNumber, + $originalProduct->product_number, + $randomSuffix + ); + $newValue->text_value = $copiedProductNumber; + $newProductFlat->name = $copiedProductNumber; + } + // force the copied product to be inactive so the admin can adjust it before release if ($oldValue->attribute_id === $attributeIds['status']) { $newValue->boolean_value = 0; From 70f9e1fd575a58792681ab7592f198526e1c09be Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Wed, 11 Nov 2020 19:53:07 +0530 Subject: [PATCH 2/3] Small Mistake Fixed --- packages/Webkul/Product/src/Repositories/ProductRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Product/src/Repositories/ProductRepository.php b/packages/Webkul/Product/src/Repositories/ProductRepository.php index a08f7374a..01ff89d49 100755 --- a/packages/Webkul/Product/src/Repositories/ProductRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductRepository.php @@ -684,7 +684,7 @@ class ProductRepository extends Repository $randomSuffix ); $newValue->text_value = $copiedProductNumber; - $newProductFlat->name = $copiedProductNumber; + $newProductFlat->product_number = $copiedProductNumber; } // force the copied product to be inactive so the admin can adjust it before release From 7af392e210e59d3e4f47571584b2a1e19afb2923 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Wed, 11 Nov 2020 22:59:50 +0530 Subject: [PATCH 3/3] Test Case Updated For Null Check --- .../functional/Admin/Catalog/ProductCest.php | 57 ++++++++++++------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/tests/functional/Admin/Catalog/ProductCest.php b/tests/functional/Admin/Catalog/ProductCest.php index ef49cb1ce..3e52fbc1e 100644 --- a/tests/functional/Admin/Catalog/ProductCest.php +++ b/tests/functional/Admin/Catalog/ProductCest.php @@ -2,26 +2,44 @@ namespace Tests\Functional\Admin\Catalog; -use FunctionalTester; use Faker\Factory; -use Webkul\Attribute\Models\Attribute; -use Webkul\Attribute\Models\AttributeFamily; -use Webkul\Attribute\Models\AttributeOption; -use Webkul\Core\Helpers\Laravel5Helper; +use FunctionalTester; use Webkul\Core\Models\Locale; use Webkul\Product\Models\Product; +use Webkul\Attribute\Models\Attribute; +use Webkul\Core\Helpers\Laravel5Helper; +use Webkul\Attribute\Models\AttributeFamily; +use Webkul\Attribute\Models\AttributeOption; use Webkul\Product\Models\ProductAttributeValue; class ProductCest { - /** @var Factory $faker */ + /** + * Factory $faker + * + * @var Faker\Factory + */ private $faker; - /** @var Attribute $attributeBrand */ + /** + * Attribute $attributeBrand + * + * @var Webkul\Attribute\Models\Attribute + */ private $attributeBrand; - /** @var AttributeOption $attributeBrandDefaultOption */ + + /** + * AttributeOption $attributeBrandDefaultOption + * + * @var Webkul\Attribute\Models\AttributeOption + */ private $attributeBrandDefaultOption; - /** @var AttributeOption $attributeBrandOption */ + + /** + * AttributeOption $attributeBrandOption + * + * @var Webkul\Attribute\Models\AttributeOption + */ private $attributeBrandOption; public function _before(FunctionalTester $I): void @@ -47,12 +65,10 @@ class ProductCest ]; } - $this->attributeBrandDefaultOption = $I->have(AttributeOption::class, - $defaultAttributeOptionAttributes); + $this->attributeBrandDefaultOption = $I->have(AttributeOption::class, $defaultAttributeOptionAttributes); $this->attributeBrandOption = $I->have(AttributeOption::class, [ 'attribute_id' => $this->attributeBrand->id, ]); - } public function testIndex(FunctionalTester $I): void @@ -90,9 +106,7 @@ class ProductCest $I->fillField('sku', $sku); $I->click(__('admin::app.catalog.products.save-btn-title')); - $I->seeInSource('Product created successfully.'); - $I->seeCurrentRouteIs('admin.catalog.products.edit'); $productTitle = $this->faker->word; @@ -100,11 +114,9 @@ class ProductCest $I->fillField('name', $productTitle); $I->fillField('url_key', $productUrlKey); - $I->selectOption($this->attributeBrand->code, - $this->attributeBrandDefaultOption->id); + $I->selectOption($this->attributeBrand->code, $this->attributeBrandDefaultOption->id); $I->fillField('price', $this->faker->randomFloat(2)); $I->fillField('weight', $this->faker->randomDigit); - $I->fillField('short_description', $this->faker->paragraph(1, true)); $I->fillField('description', $this->faker->paragraph(5, true)); @@ -119,11 +131,18 @@ class ProductCest 'attribute_family_id' => $attributeFamily->id, ]); + $productAttribute = $I->grabRecord(ProductAttributeValue::class, [ + 'product_id' => $product->id, + 'attribute_id' => $this->attributeBrand->id, + 'integer_value' => $this->attributeBrandDefaultOption->id + ]); + $I->seeRecord(ProductAttributeValue::class, [ 'product_id' => $product->id, 'attribute_id' => $this->attributeBrand->id, - 'integer_value' => $this->attributeBrandDefaultOption->id, - 'text_value' => null, + 'integer_value' => $this->attributeBrandDefaultOption->id ]); + + $I->assertNull($productAttribute->text_value); } }