From 887d02d87260e8fa7c47a0c9fa15fa91306c4fc0 Mon Sep 17 00:00:00 2001 From: merdan Date: Mon, 31 Jan 2022 20:15:13 +0500 Subject: [PATCH] configurable options nonfinished. finish home --- .../Sarga/API/Http/Controllers/Products.php | 42 ++++++----- .../Http/Resources/Catalog/ProductVariant.php | 18 ++++- .../Http/Resources/Catalog/SuperAttribute.php | 23 ++++++ .../Sarga/{Scrap => Importer}/composer.json | 8 +-- .../{Scrap => Importer}/src/Config/scrap.php | 0 .../src/Http/Controllers/LCW.php | 0 .../Http/Controllers/ProductController.php | 70 +++++++++++++++++++ .../src/Http/Controllers/Trendyol.php | 0 .../Providers/ImporterServiceProvider.php} | 4 +- packages/Sarga/Importer/src/Routes/routes.php | 20 ++++++ packages/Sarga/Scrap/src/Routes/routes.php | 15 ---- .../Seeders/AttributeGroupTableSeeder.php | 12 ++-- .../Database/Seeders/AttributeTableSeeder.php | 56 ++++++++------- 13 files changed, 197 insertions(+), 71 deletions(-) create mode 100644 packages/Sarga/API/Http/Resources/Catalog/SuperAttribute.php rename packages/Sarga/{Scrap => Importer}/composer.json (69%) rename packages/Sarga/{Scrap => Importer}/src/Config/scrap.php (100%) rename packages/Sarga/{Scrap => Importer}/src/Http/Controllers/LCW.php (100%) create mode 100644 packages/Sarga/Importer/src/Http/Controllers/ProductController.php rename packages/Sarga/{Scrap => Importer}/src/Http/Controllers/Trendyol.php (100%) rename packages/Sarga/{Scrap/src/Providers/ScrapServiceProvider.php => Importer/src/Providers/ImporterServiceProvider.php} (77%) create mode 100644 packages/Sarga/Importer/src/Routes/routes.php delete mode 100644 packages/Sarga/Scrap/src/Routes/routes.php diff --git a/packages/Sarga/API/Http/Controllers/Products.php b/packages/Sarga/API/Http/Controllers/Products.php index 6d4a743c7..d2693bfe2 100644 --- a/packages/Sarga/API/Http/Controllers/Products.php +++ b/packages/Sarga/API/Http/Controllers/Products.php @@ -2,6 +2,10 @@ namespace Sarga\API\Http\Controllers; +use Sarga\API\Http\Resources\Catalog\Attribute; +use Sarga\API\Http\Resources\Catalog\AttributeOption; +use Sarga\API\Http\Resources\Catalog\ProductVariant; +use Sarga\API\Http\Resources\Catalog\SuperAttribute; use Sarga\API\Repositories\ProductRepository; use Webkul\API\Http\Controllers\Shop\ProductController; use Sarga\API\Http\Resources\Catalog\Product as ProductResource; @@ -57,35 +61,39 @@ class Products extends ProductController ->where('status',1); }]); }])->find($id); -// return $product; +// return $product->variants; //Attribute::make($product->super_attributes->first()); if(!empty($product) && $product->super_attributes->isNotEmpty() && $product->variants->isNotEmpty()){ $variants = $product->variants->makeHidden(['type','created_at','updated_at','parent_id','attribute_family_id', 'additional','new','featured','visible_individually','status','guest_checkout','meta_title','meta_keywords', 'product_flats','attribute_family','short_description','sku','brand']); - $data = array(); - $attribute_main = $product->super_attributes->first(); + $attribute = $product->super_attributes->first(); + $data =[]; + $distinctVariants = $variants->unique($attribute->code);//->only([$attribute_main->code]); - if($product->super_attributes->count() > 1){ + $gr_data = array('attribute' => SuperAttribute::make($attribute),'options' =>[]); - $last_attribute = $product->super_attributes->last(); - foreach($variants as $variant){ - $option = $this->attributeOptionRepository->getOptionLabel($variant->{$attribute_main->code}); - $last_option = $this->attributeOptionRepository->getOptionLabel($variant->{$last_attribute->code}); - $data[$attribute_main->code][$option]['image'] = $variant->images; - $data[$attribute_main->code][$option][$last_attribute->code][$last_option] = ProductResource::make($variant); +// return $attribute->options->whereIn('id',$distinctVariants->pluck($attribute->code)->toArray()); + foreach($distinctVariants as $variant){ + $option = $attribute->options->where('id',$variant->{$attribute->code})->first(); + $item = [ + 'option' => $option->admin_name, + 'images' => $variant->images, + ]; + + if($product->super_attributes->count()>1 && $option){ + $last_attribute = $product->super_attributes->last(); + $item['variants']['attribute'] = SuperAttribute::make($last_attribute); + $item['variants']['products'] = ProductResource::collection($variants->where($attribute->code,$variant->{$attribute->code}),$last_attribute); } - } - else{ - foreach($variants as $variant){ - $option = $this->attributeOptionRepository->getOptionLabel($variant->{$attribute_main->code}); - - $data[$attribute_main->code][$option] = ProductResource::make($variant); + else{ + $item['product'] = ProductVariant::make($variants); } + $gr_data['options'][] = $item; } - return response()->json($data); + return response()->json($gr_data); } else{ return response()->json(['message' => 'not found'],404); diff --git a/packages/Sarga/API/Http/Resources/Catalog/ProductVariant.php b/packages/Sarga/API/Http/Resources/Catalog/ProductVariant.php index efbd80dd3..c1954bf58 100644 --- a/packages/Sarga/API/Http/Resources/Catalog/ProductVariant.php +++ b/packages/Sarga/API/Http/Resources/Catalog/ProductVariant.php @@ -6,6 +6,20 @@ use Illuminate\Http\Resources\Json\JsonResource; class ProductVariant extends JsonResource { + /** + * Create a new resource instance. + * + * @return void + */ + + public function __construct($resource,$attribute) + { +// $this->productReviewHelper = app('Webkul\Product\Helpers\Review'); + + $this->wishlistHelper = app('Webkul\Customer\Helpers\Wishlist'); + $this->attribute = $attribute; + parent::__construct($resource); + } /** * Transform the resource into an array. * @@ -25,8 +39,8 @@ class ProductVariant extends JsonResource 'additional' => $this->additional, 'price' => $productTypeInstance->getMinimalPrice(), 'converted_price' => core()->currency($productTypeInstance->getMinimalPrice()), - "color" => $this->color, - "size" => $this->size, + "attribute" => $this->attribute, +// "size" => $this->size, // "brand"=>$this->brand, /* special price cases */ diff --git a/packages/Sarga/API/Http/Resources/Catalog/SuperAttribute.php b/packages/Sarga/API/Http/Resources/Catalog/SuperAttribute.php new file mode 100644 index 000000000..c70ec572d --- /dev/null +++ b/packages/Sarga/API/Http/Resources/Catalog/SuperAttribute.php @@ -0,0 +1,23 @@ + $this->id, + 'code' => $this->code, + 'name' => $this->name, + ]; + } +} \ No newline at end of file diff --git a/packages/Sarga/Scrap/composer.json b/packages/Sarga/Importer/composer.json similarity index 69% rename from packages/Sarga/Scrap/composer.json rename to packages/Sarga/Importer/composer.json index 76b087384..ce2c44a2f 100644 --- a/packages/Sarga/Scrap/composer.json +++ b/packages/Sarga/Importer/composer.json @@ -1,6 +1,6 @@ { - "name": "sarga/scrap", - "description": "Scrap for Sarga.", + "name": "sarga/importer", + "description": "Porduct importer for Sarga.", "license": "MIT", "authors": [ @@ -13,14 +13,14 @@ "require": {}, "autoload": { "psr-4": { - "Sarga\\Scrap\\": "src/" + "Sarga\\Importer\\": "src/" } }, "extra": { "laravel": { "providers": [ - "Sarga\\Scrap\\Providers\\ScrapServiceProvider" + "ImporterServiceProvider" ], "aliases": {} } diff --git a/packages/Sarga/Scrap/src/Config/scrap.php b/packages/Sarga/Importer/src/Config/scrap.php similarity index 100% rename from packages/Sarga/Scrap/src/Config/scrap.php rename to packages/Sarga/Importer/src/Config/scrap.php diff --git a/packages/Sarga/Scrap/src/Http/Controllers/LCW.php b/packages/Sarga/Importer/src/Http/Controllers/LCW.php similarity index 100% rename from packages/Sarga/Scrap/src/Http/Controllers/LCW.php rename to packages/Sarga/Importer/src/Http/Controllers/LCW.php diff --git a/packages/Sarga/Importer/src/Http/Controllers/ProductController.php b/packages/Sarga/Importer/src/Http/Controllers/ProductController.php new file mode 100644 index 000000000..cd79c0e9e --- /dev/null +++ b/packages/Sarga/Importer/src/Http/Controllers/ProductController.php @@ -0,0 +1,70 @@ +sellerRepository = $sellerRepository; + $this->productRepository = $productRepository; + } + + public function create() + { + try { + $data = json_decode(request()->getContent(),true); + } + catch (\Exception $e){ + Log::error($e); + return response()->json(['errors'=>$e->getMessage()],400); + } + + $validation = Validator::make($data, [ + 'categories' => 'required', +// 'sku' => ['required', 'unique:products,sku', new Slug], + 'images' => 'required', + 'name' => 'required', + 'url_key'=> 'required', + 'price' => 'required', + 'vendor' => 'required' + ]); + + if ($validation->fails()) { + + return response()->json(['errors'=>$validation->getMessageBag()->all()],422); + } + + if($product = $this->productRepository->findOneByField('sku',$data['sku'])) + { + return response()->json(['success'=>true,'product_id' => $product->id]); + } + elseif($product = $this->productRepository->create($data)) + { + return response()->json([ + 'success'=>true, + 'product_id' => $product->id + ]); + }else + { + return response()->json(['success'=>false],400); + } + + } + + public function update(){ + + } +} \ No newline at end of file diff --git a/packages/Sarga/Scrap/src/Http/Controllers/Trendyol.php b/packages/Sarga/Importer/src/Http/Controllers/Trendyol.php similarity index 100% rename from packages/Sarga/Scrap/src/Http/Controllers/Trendyol.php rename to packages/Sarga/Importer/src/Http/Controllers/Trendyol.php diff --git a/packages/Sarga/Scrap/src/Providers/ScrapServiceProvider.php b/packages/Sarga/Importer/src/Providers/ImporterServiceProvider.php similarity index 77% rename from packages/Sarga/Scrap/src/Providers/ScrapServiceProvider.php rename to packages/Sarga/Importer/src/Providers/ImporterServiceProvider.php index f90215047..cfdb559e8 100644 --- a/packages/Sarga/Scrap/src/Providers/ScrapServiceProvider.php +++ b/packages/Sarga/Importer/src/Providers/ImporterServiceProvider.php @@ -1,9 +1,9 @@ - 'scrapi'], function ($router) { + Route::group(['middleware' => ['locale', 'currency']], function ($router) { + + }); + +}); +Route::group(['prefix' => 'scrap','middleware' =>['scrap']], function ($router){ + //Trendyol routes + Route::get('trendyol',[Trendyol::class, 'index']); + + //LCW + Route::get('lcw',[LCW::class, 'index']); + Route::put('create',[ProductController::class,'create']); +}); \ No newline at end of file diff --git a/packages/Sarga/Scrap/src/Routes/routes.php b/packages/Sarga/Scrap/src/Routes/routes.php deleted file mode 100644 index 88d81455b..000000000 --- a/packages/Sarga/Scrap/src/Routes/routes.php +++ /dev/null @@ -1,15 +0,0 @@ - 'scrapi'], function ($router) { - Route::group(['middleware' => ['locale', 'currency']], function ($router) { - //Trendyol routes - Route::get('trendyol',[Trendyol::class, 'index']); - - //LCW - Route::get('lcw',[LCW::class, 'index']); - }); - -}); diff --git a/packages/Webkul/Attribute/src/Database/Seeders/AttributeGroupTableSeeder.php b/packages/Webkul/Attribute/src/Database/Seeders/AttributeGroupTableSeeder.php index 135e050b6..aad58ace4 100755 --- a/packages/Webkul/Attribute/src/Database/Seeders/AttributeGroupTableSeeder.php +++ b/packages/Webkul/Attribute/src/Database/Seeders/AttributeGroupTableSeeder.php @@ -148,11 +148,13 @@ class AttributeGroupTableSeeder extends Seeder 'attribute_id' => '24', 'attribute_group_id' => '1', 'position' => '12', - ], [ - 'attribute_id' => '25', - 'attribute_group_id' => '1', - 'position' => '13', - ], [ + ], +// [ +// 'attribute_id' => '25', +// 'attribute_group_id' => '1', +// 'position' => '13', +// ], + [ 'attribute_id' => '26', 'attribute_group_id' => '1', 'position' => '9', diff --git a/packages/Webkul/Attribute/src/Database/Seeders/AttributeTableSeeder.php b/packages/Webkul/Attribute/src/Database/Seeders/AttributeTableSeeder.php index 3494f3a81..bbade6146 100755 --- a/packages/Webkul/Attribute/src/Database/Seeders/AttributeTableSeeder.php +++ b/packages/Webkul/Attribute/src/Database/Seeders/AttributeTableSeeder.php @@ -474,26 +474,28 @@ class AttributeTableSeeder extends Seeder 'created_at' => $now, 'updated_at' => $now, 'is_comparable' => '0', - ], [ - 'id' => '25', - 'code' => 'brand', - 'admin_name' => 'Brand', - 'type' => 'select', - 'validation' => NULL, - 'position' => '28', - 'is_required' => '0', - 'is_unique' => '0', - 'value_per_locale' => '0', - 'value_per_channel' => '0', - 'is_filterable' => '1', - 'is_configurable' => '0', - 'is_user_defined' => '1', - 'is_visible_on_front' => '1', - 'use_in_flat' => '1', - 'created_at' => $now, - 'updated_at' => $now, - 'is_comparable' => '0', - ], [ + ], +// [ +// 'id' => '25', +// 'code' => 'brand', +// 'admin_name' => 'Brand', +// 'type' => 'select', +// 'validation' => NULL, +// 'position' => '28', +// 'is_required' => '0', +// 'is_unique' => '0', +// 'value_per_locale' => '0', +// 'value_per_channel' => '0', +// 'is_filterable' => '1', +// 'is_configurable' => '0', +// 'is_user_defined' => '1', +// 'is_visible_on_front' => '1', +// 'use_in_flat' => '1', +// 'created_at' => $now, +// 'updated_at' => $now, +// 'is_comparable' => '0', +// ], + [ 'id' => '26', 'code' => 'guest_checkout', 'admin_name' => 'Guest Checkout', @@ -655,12 +657,14 @@ class AttributeTableSeeder extends Seeder 'locale' => 'en', 'name' => 'Size', 'attribute_id' => '24', - ], [ - 'id' => '25', - 'locale' => 'en', - 'name' => 'Brand', - 'attribute_id' => '25', - ], [ + ], +// [ +// 'id' => '25', +// 'locale' => 'en', +// 'name' => 'Brand', +// 'attribute_id' => '25', +// ], + [ 'id' => '26', 'locale' => 'en', 'name' => 'Allow Guest Checkout',