diff --git a/CHANGELOG for v1.3.x.md b/CHANGELOG for v1.5.x.md similarity index 75% rename from CHANGELOG for v1.3.x.md rename to CHANGELOG for v1.5.x.md index caeaf3b..6ed374e 100644 --- a/CHANGELOG for v1.3.x.md +++ b/CHANGELOG for v1.5.x.md @@ -1,7 +1,12 @@ -# CHANGELOG for v1.3.x +# CHANGELOG for v1.5.x + #### This changelog consists the bug & security fixes and new features being included in the releases listed below. +## **v1.5.1(30th of May 2023)** - _Release_ + +- [compatible] Compatible with bagisto v1.5.1. + ## **v1.3.3(24th of Oct, 2021)** - _Release_ - [compatible] Compatible with bagisto v1.3.3. diff --git a/README.md b/README.md index 7719ec0..77f23d2 100644 --- a/README.md +++ b/README.md @@ -12,36 +12,8 @@ It packs in lots of demanding features that allows your business to scale in no ## Requirements: -- **Bagisto**: v1.3.3 - -## Installation with composer: -- Run the following command -``` -composer require bagisto/bagisto-bulk-upload -``` - -- Goto vendor/bagisto/bagisto-bulkupload and copy the storage folder and merge it into the root of your project. - -- Goto config/concord.php file and add following line under 'modules' -```php -\Webkul\Bulkupload\Providers\ModuleServiceProvider::class -``` - -- Run these commands below to complete the setup -``` -composer dump-autoload -``` - -``` -php artisan migrate -php artisan storage:link -php artisan route:cache -php artisan config:cache -php artisan vendor:publish -``` --> Press 0 and then press enter to publish all assets and configurations. - -## Installation without composer: +- **Bagisto**: v1.5.1 +## Installation: - Unzip the respective extension zip and then merge "packages" and "storage" folders into project root directory. - Goto config/app.php file and add following line under 'providers' @@ -86,4 +58,9 @@ php artisan vendor:publish -> Press 0 and then press enter to publish all assets and configurations. ``` + +``` +Move storage/app/public/download/sample-files into root/storage/app/public/download/ +``` + > That's it, now just execute the project on your specified domain. diff --git a/.gitignore b/packages/Webkul/Bulkupload/.gitignore similarity index 100% rename from .gitignore rename to packages/Webkul/Bulkupload/.gitignore diff --git a/LICENSE b/packages/Webkul/Bulkupload/LICENSE similarity index 100% rename from LICENSE rename to packages/Webkul/Bulkupload/LICENSE diff --git a/composer.json b/packages/Webkul/Bulkupload/composer.json similarity index 100% rename from composer.json rename to packages/Webkul/Bulkupload/composer.json diff --git a/package.json b/packages/Webkul/Bulkupload/package.json similarity index 54% rename from package.json rename to packages/Webkul/Bulkupload/package.json index 7b6644f..ab91c65 100644 --- a/package.json +++ b/packages/Webkul/Bulkupload/package.json @@ -2,20 +2,20 @@ "private": true, "scripts": { "dev": "npm run development", - "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", - "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js", "watch-poll": "cross-env npm run watch -- --watch-poll --progress", "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "prod": "npm run production", - "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { - "axios": "^0.18", - "cross-env": "^5.1.4", - "laravel-mix": "^2.1", - "laravel-mix-merge-manifest": "^0.1.1", - "jquery": "^3.2", + "axios": "^1.4.0", + "cross-env": "^7.0.3", + "laravel-mix": "^6.0.49", + "laravel-mix-merge-manifest": "^2.1.0", + "sass": "^1.62.1", + "sass-loader": "^12.6.0", "vue": "^2.1.10" - }, - "dependencies": {} + } } diff --git a/publishable/assets/css/bk_upload.css b/packages/Webkul/Bulkupload/publishable/assets/css/bk_upload.css similarity index 100% rename from publishable/assets/css/bk_upload.css rename to packages/Webkul/Bulkupload/publishable/assets/css/bk_upload.css diff --git a/publishable/assets/css/bulk-admin.css b/packages/Webkul/Bulkupload/publishable/assets/css/bulk-admin.css similarity index 100% rename from publishable/assets/css/bulk-admin.css rename to packages/Webkul/Bulkupload/publishable/assets/css/bulk-admin.css diff --git a/publishable/assets/images/Icon-Bulk-Upload-Active.svg b/packages/Webkul/Bulkupload/publishable/assets/images/Icon-Bulk-Upload-Active.svg similarity index 100% rename from publishable/assets/images/Icon-Bulk-Upload-Active.svg rename to packages/Webkul/Bulkupload/publishable/assets/images/Icon-Bulk-Upload-Active.svg diff --git a/publishable/assets/images/Icon-Bulk-Upload.svg b/packages/Webkul/Bulkupload/publishable/assets/images/Icon-Bulk-Upload.svg similarity index 100% rename from publishable/assets/images/Icon-Bulk-Upload.svg rename to packages/Webkul/Bulkupload/publishable/assets/images/Icon-Bulk-Upload.svg diff --git a/publishable/assets/images/Icon-Crossed.svg b/packages/Webkul/Bulkupload/publishable/assets/images/Icon-Crossed.svg similarity index 100% rename from publishable/assets/images/Icon-Crossed.svg rename to packages/Webkul/Bulkupload/publishable/assets/images/Icon-Crossed.svg diff --git a/publishable/assets/images/check-accent.svg b/packages/Webkul/Bulkupload/publishable/assets/images/check-accent.svg similarity index 100% rename from publishable/assets/images/check-accent.svg rename to packages/Webkul/Bulkupload/publishable/assets/images/check-accent.svg diff --git a/publishable/assets/images/cross-accent.svg b/packages/Webkul/Bulkupload/publishable/assets/images/cross-accent.svg similarity index 100% rename from publishable/assets/images/cross-accent.svg rename to packages/Webkul/Bulkupload/publishable/assets/images/cross-accent.svg diff --git a/publishable/assets/images/finish.svg b/packages/Webkul/Bulkupload/publishable/assets/images/finish.svg similarity index 100% rename from publishable/assets/images/finish.svg rename to packages/Webkul/Bulkupload/publishable/assets/images/finish.svg diff --git a/publishable/assets/mix-manifest.json b/packages/Webkul/Bulkupload/publishable/assets/mix-manifest.json similarity index 100% rename from publishable/assets/mix-manifest.json rename to packages/Webkul/Bulkupload/publishable/assets/mix-manifest.json diff --git a/src/Config/admin-menu.php b/packages/Webkul/Bulkupload/src/Config/admin-menu.php similarity index 100% rename from src/Config/admin-menu.php rename to packages/Webkul/Bulkupload/src/Config/admin-menu.php diff --git a/src/Config/system.php b/packages/Webkul/Bulkupload/src/Config/system.php similarity index 100% rename from src/Config/system.php rename to packages/Webkul/Bulkupload/src/Config/system.php diff --git a/src/Contracts/DataFlowProfile.php b/packages/Webkul/Bulkupload/src/Contracts/DataFlowProfile.php similarity index 100% rename from src/Contracts/DataFlowProfile.php rename to packages/Webkul/Bulkupload/src/Contracts/DataFlowProfile.php diff --git a/src/Contracts/ImportProduct.php b/packages/Webkul/Bulkupload/src/Contracts/ImportProduct.php similarity index 100% rename from src/Contracts/ImportProduct.php rename to packages/Webkul/Bulkupload/src/Contracts/ImportProduct.php diff --git a/src/DataGrids/Admin/ProfileDataGrid.php b/packages/Webkul/Bulkupload/src/DataGrids/Admin/ProfileDataGrid.php similarity index 64% rename from src/DataGrids/Admin/ProfileDataGrid.php rename to packages/Webkul/Bulkupload/src/DataGrids/Admin/ProfileDataGrid.php index f0c9404..fac0425 100644 --- a/src/DataGrids/Admin/ProfileDataGrid.php +++ b/packages/Webkul/Bulkupload/src/DataGrids/Admin/ProfileDataGrid.php @@ -2,26 +2,28 @@ namespace Webkul\Bulkupload\DataGrids\Admin; -use DB; +use Illuminate\Support\Facades\DB; use Webkul\Ui\DataGrid\DataGrid; -/** - * Profile Datagrid class - * - */ class ProfileDataGrid extends DataGrid { /** - * @var integer + * Index + * + * @var string */ protected $index = 'id'; + /** + * Prepare the query builder + * + * @return void + */ public function prepareQueryBuilder() { $queryBuilder = DB::table('bulkupload_data_flow_profiles') ->leftJoin('attribute_families', 'bulkupload_data_flow_profiles.attribute_family_id', '=', 'attribute_families.id') - ->select('bulkupload_data_flow_profiles.id', - 'bulkupload_data_flow_profiles.name as profile_name', 'attribute_families.name', 'bulkupload_data_flow_profiles.locale_code', 'bulkupload_data_flow_profiles.created_at'); + ->select('bulkupload_data_flow_profiles.id', 'bulkupload_data_flow_profiles.name as profile_name', 'attribute_families.name', 'bulkupload_data_flow_profiles.locale_code', 'bulkupload_data_flow_profiles.created_at'); $this->addFilter('created_at', 'bulkupload_data_flow_profiles.created_at'); $this->addFilter('profile_name', 'bulkupload_data_flow_profiles.name'); @@ -30,11 +32,16 @@ public function prepareQueryBuilder() $this->setQueryBuilder($queryBuilder); } + /** + * Add Column + * + * @return void + */ public function addColumns() { $this->addColumn([ 'index' => 'profile_name', - 'label' => trans('bulkupload::app.admin.bulk-upload.data-flow-profile.name'), + 'label' => __('bulkupload::app.admin.bulk-upload.data-flow-profile.name'), 'type' => 'string', 'searchable' => true, 'sortable' => true, @@ -43,7 +50,7 @@ public function addColumns() $this->addColumn([ 'index' => 'name', - 'label' => trans('admin::app.catalog.products.familiy'), + 'label' => __('admin::app.catalog.products.family'), 'type' => 'string', 'searchable' => true, 'sortable' => true, @@ -52,7 +59,7 @@ public function addColumns() $this->addColumn([ 'index' => 'locale_code', - 'label' => trans('bulkupload::app.admin.bulk-upload.data-flow-profile.data-grid.locale_code'), + 'label' => __('bulkupload::app.admin.bulk-upload.data-flow-profile.data-grid.locale_code'), 'type' => 'string', 'searchable' => true, 'sortable' => true, @@ -61,7 +68,7 @@ public function addColumns() $this->addColumn([ 'index' => 'created_at', - 'label' => trans('bulkupload::app.admin.bulk-upload.data-flow-profile.data-grid.created-at'), + 'label' => __('bulkupload::app.admin.bulk-upload.data-flow-profile.data-grid.created-at'), 'type' => 'datetime', 'sortable' => true, 'searchable' => false, @@ -69,29 +76,33 @@ public function addColumns() ]); } + /** + * Prepare actions + * + * @return void + */ public function prepareActions() { $this->addAction([ - 'type' => 'Edit', + 'title' => trans('admin::app.datagrid.edit'), 'method' => 'GET', 'route' => 'bulkupload.admin.profile.edit', 'icon' => 'icon pencil-lg-icon', - 'title' => '' - ]); $this->addAction([ - 'type' => trans('admin::app.datagrid.delete'), - 'method' => 'POST', - 'route' => 'bulkupload.admin.profile.delete', - 'confirm_text' => trans('ui::app.datagrid.massaction.delete'), - 'icon' => 'icon trash-icon', - 'title' => '' + 'title' => trans('admin::app.datagrid.delete'), + 'method' => 'POST', + 'route' => 'bulkupload.admin.profile.delete', + 'icon' => 'icon trash-icon', ]); - - $this->enableAction = true; } + /** + * Prepare mass actions + * + * @return void + */ public function prepareMassActions() { $this->addMassAction([ diff --git a/src/Database/Migrations/2019_04_23_115227_create_bulkupload_data_flow_profiles_table.php b/packages/Webkul/Bulkupload/src/Database/Migrations/2019_04_23_115227_create_bulkupload_data_flow_profiles_table.php similarity index 100% rename from src/Database/Migrations/2019_04_23_115227_create_bulkupload_data_flow_profiles_table.php rename to packages/Webkul/Bulkupload/src/Database/Migrations/2019_04_23_115227_create_bulkupload_data_flow_profiles_table.php diff --git a/src/Database/Migrations/2020_05_13_223920_create_import_products_table.php b/packages/Webkul/Bulkupload/src/Database/Migrations/2020_05_13_223920_create_import_products_table.php similarity index 100% rename from src/Database/Migrations/2020_05_13_223920_create_import_products_table.php rename to packages/Webkul/Bulkupload/src/Database/Migrations/2020_05_13_223920_create_import_products_table.php diff --git a/src/Database/Migrations/2021_12_28_150311_alter_bulkupload_data_flow_profiles_table.php b/packages/Webkul/Bulkupload/src/Database/Migrations/2021_12_28_150311_alter_bulkupload_data_flow_profiles_table.php similarity index 79% rename from src/Database/Migrations/2021_12_28_150311_alter_bulkupload_data_flow_profiles_table.php rename to packages/Webkul/Bulkupload/src/Database/Migrations/2021_12_28_150311_alter_bulkupload_data_flow_profiles_table.php index 7d0e24e..cbdddfe 100644 --- a/src/Database/Migrations/2021_12_28_150311_alter_bulkupload_data_flow_profiles_table.php +++ b/packages/Webkul/Bulkupload/src/Database/Migrations/2021_12_28_150311_alter_bulkupload_data_flow_profiles_table.php @@ -25,6 +25,8 @@ public function up() */ public function down() { - // + Schema::table('bulkupload_data_flow_profiles', function(Blueprint $table) { + $table->dropColumn('locale_code'); + }); } } diff --git a/packages/Webkul/Bulkupload/src/Helpers/ImportProduct.php b/packages/Webkul/Bulkupload/src/Helpers/ImportProduct.php new file mode 100644 index 0000000..9276831 --- /dev/null +++ b/packages/Webkul/Bulkupload/src/Helpers/ImportProduct.php @@ -0,0 +1,131 @@ +has('is_downloadable')) { + $product['is_downloadable'] = 1; + + if ( + request()->hasFile('link_files') + && ! in_array(request()->file('link_files')->getClientOriginalExtension(), $valid_image_extension) + ) { + $uploadedLinkFiles = request()->file('link_files')->storeAs($linkFilesDir, uniqid() . '.' . request()->file('link_files')->getClientOriginalExtension()); + + $product['upload_link_files'] = $uploadedLinkFiles; + } else { + session()->flash('error', __('bulkupload::app.admin.bulk-upload.messages.file-format-error')); + + return redirect()->route('admin.bulk-upload.index'); + } + + if (request()->input('is_link_have_sample')) { + $product['is_links_have_samples'] = 1; + + if (in_array(request()->file('link_sample_files')->getClientOriginalExtension(), $valid_image_extension)) { + $uploadedLinkSampleFiles = request()->file('link_sample_files')->storeAs($linkSampleFilesDir, uniqid().'.'.request()->file('link_sample_files')->getClientOriginalExtension()); + + $product['upload_link_sample_files'] = $uploadedLinkSampleFiles; + } else { + session()->flash('error', __('bulkupload::app.admin.bulk-upload.messages.file-format-error')); + + return redirect()->route('admin.bulk-upload.index'); + } + } + + if (request()->input('is_sample')) { + $product['is_samples_available'] = 1; + + if (in_array(request()->file('sample_file')->getClientOriginalExtension(), $valid_image_extension)) { + $uploadedSampleFiles = request()->file('sample_file')->storeAs($sampleFileDir, uniqid().'.'.request()->file('sample_file')->getClientOriginalExtension()); + + $product['upload_sample_files'] = $uploadedSampleFiles; + } else { + session()->flash('error', __('bulkupload::app.admin.bulk-upload.messages.file-format-error')); + + return redirect()->route('admin.bulk-upload.index'); + } + } + } + + $product['data_flow_profile_id'] = request()->input('data_flow_profile'); + $product['attribute_family_id'] = request()->input('attribute_family'); + + if ( + request()->hasFile('image_path') + && in_array(request()->file('image_path')->getClientOriginalExtension(), $valid_image_extension) + && in_array(request()->file('file_path')->getClientOriginalExtension(), $valid_extension) + ) { + $uploadedImage = request()->file('image_path')->storeAs($imageDir, uniqid().'.'.request()->file('image_path')->getClientOriginalExtension()); + + $product['image_path'] = $uploadedImage; + + $uploadedFile = request()->file('file_path')->storeAs($fileDir, uniqid() . '.' . request()->file('file_path')->getClientOriginalExtension()); + + $product['file_path'] = $uploadedFile; + } elseif ( + ! request()->hasFile('image_path') + && in_array(request()->file('file_path')->getClientOriginalExtension(), $valid_extension) + ) { + $product['image_path'] = ''; + + $uploadedFile = request()->file('file_path')->storeAs($fileDir, uniqid() . '.' . request()->file('file_path')->getClientOriginalExtension()); + + $product['file_path'] = $uploadedFile; + } else { + session()->flash('error', __('bulkupload::app.admin.bulk-upload.messages.file-format-error')); + + return redirect()->route('admin.bulk-upload.index'); + } + + $importedProduct = $this->importProductRepository->findOneByField('data_flow_profile_id', request()->input('data_flow_profile')); + + if ($importedProduct) { + $this->dataFlowProfileRepository->update(['run_status' => '0'], request()->input('data_flow_profile')); + + $this->importProductRepository->update($product, $importedProduct->id); + + session()->flash('success', __('bulkupload::app.admin.bulk-upload.messages.update-profile')); + + return redirect()->route('admin.bulk-upload.index'); + } + + $this->importProductRepository->create($product); + + session()->flash('success', __('bulkupload::app.admin.bulk-upload.messages.profile-saved')); + + return redirect()->route('admin.bulk-upload.index'); + } +} \ No newline at end of file diff --git a/src/Http/Controllers/Admin/BulkUploadController.php b/packages/Webkul/Bulkupload/src/Http/Controllers/Admin/BulkUploadController.php similarity index 51% rename from src/Http/Controllers/Admin/BulkUploadController.php rename to packages/Webkul/Bulkupload/src/Http/Controllers/Admin/BulkUploadController.php index 62966a1..b115271 100644 --- a/src/Http/Controllers/Admin/BulkUploadController.php +++ b/packages/Webkul/Bulkupload/src/Http/Controllers/Admin/BulkUploadController.php @@ -3,48 +3,12 @@ namespace Webkul\Bulkupload\Http\Controllers\Admin; use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Bulkupload\Repositories\DataFlowProfileRepository; +use Webkul\Bulkupload\Repositories\{ImportProductRepository, DataFlowProfileRepository}; +use Webkul\Bulkupload\Requests\AddProfileRequest; +use Webkul\Bulkupload\DataGrids\Admin\ProfileDataGrid; class BulkUploadController extends Controller { - /** - * DataFlowProfileRepository object - * - * @var \Webkul\Bulkupload\Repositories\DataFlowProfileRepository - * - */ - protected $dataFlowProfileRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - * - */ - protected $attributeFamilyRepository; - - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - * - */ - protected $importProductRepository; - - /** - * @var array - */ - protected $product = []; - - /** - * Contains route related configuration - * - * @var array - */ - protected $_config; - - /** * Create a new controller instance. * @@ -55,18 +19,12 @@ class BulkUploadController extends Controller * @return void */ public function __construct( - AttributeFamilyRepository $attributeFamilyRepository, - DataFlowProfileRepository $dataFlowProfileRepository, - ImportProductRepository $importProductRepository - ) - { - $this->_config = request('_config'); - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->importProductRepository = $importProductRepository; - - $this->dataFlowProfileRepository = $dataFlowProfileRepository; + protected AttributeFamilyRepository $attributeFamilyRepository, + protected DataFlowProfileRepository $dataFlowProfileRepository, + protected ImportProductRepository $importProductRepository, + protected $_config = null + ) { + $this->_config = $_config ?? request('_config'); } /** @@ -76,20 +34,22 @@ public function __construct( */ public function index() { - $profiles = null; + if (request()->ajax()) { + return app(ProfileDataGrid::class)->toJson(); + } + + $profiles = []; $families = $this->attributeFamilyRepository->all(); - $allProfiles = $this->importProductRepository->get()->toArray(); + $allProfiles = $this->importProductRepository->all(); if (! empty($allProfiles)) { - foreach ($allProfiles as $allProfile) { - $profilers[] = $allProfile['data_flow_profile_id']; - } - + $profilers = $allProfiles->pluck('data_flow_profile_id'); + foreach ($profilers as $key => $profiler) { $profiles[] = $this->dataFlowProfileRepository->findByfield(['id' => $profilers[$key], 'run_status' => '0']); } } - + return view($this->_config['view'], compact('families', 'profiles')); } @@ -98,20 +58,9 @@ public function index() * * @return \Illuminate\Http\Response */ - public function store() + public function store(AddProfileRequest $addProfileRequest) { - request()->validate([ - 'name' => 'required|unique:bulkupload_data_flow_profiles', - 'attribute_family' => 'required', - 'locale_code' => 'required' - ]); - - $dataFlowProfileAdmin['name'] = request()->name; - $dataFlowProfileAdmin['attribute_family_id'] = request()->attribute_family; - $dataFlowProfileAdmin['locale_code'] = request()->locale_code; - - - $this->dataFlowProfileRepository->create($dataFlowProfileAdmin); + $this->dataFlowProfileRepository->create($addProfileRequest->validated()); session()->flash('success',trans('bulkupload::app.admin.bulk-upload.messages.profile-saved')); @@ -138,14 +87,12 @@ public function edit($id) * @param int $id * @return \Illuminate\Http\Response */ - public function update($id) + public function update(AddProfileRequest $addProfileRequest, $id) { - $product = $this->dataFlowProfileRepository->update(request()->except('_token'), $id); - $families = $this->attributeFamilyRepository->all(); - $profiles = $this->dataFlowProfileRepository->findOrFail($id); - - session()->flash('success', trans('admin::app.response.update-success', ['name' => 'Product'])); - + $this->dataFlowProfileRepository->update($addProfileRequest->validated(), $id); + + session()->flash('success', __('bulkupload::app.admin.bulk-upload.messages.update-profile')); + return redirect()->route('admin.dataflow-profile.index'); } @@ -153,15 +100,14 @@ public function update($id) * Remove the specified resource from storage. * * @param int $id - * @return \Illuminate\Http\Response + * + * @return \Illuminate\Http\JsonResponse */ public function destroy($id) { - $product = $this->dataFlowProfileRepository->findOrFail($id)->delete(); - - session()->flash('success',trans('bulkupload::app.admin.bulk-upload.messages.profile-deleted')); + $this->dataFlowProfileRepository->findOrFail($id)->delete(); - return response()->json(['message' => true], 200); + return response()->json(['message' => __('bulkupload::app.admin.bulk-upload.messages.profile-deleted')], 200); } /** diff --git a/src/Http/Controllers/Admin/Controller.php b/packages/Webkul/Bulkupload/src/Http/Controllers/Admin/Controller.php similarity index 100% rename from src/Http/Controllers/Admin/Controller.php rename to packages/Webkul/Bulkupload/src/Http/Controllers/Admin/Controller.php diff --git a/src/Http/Controllers/Admin/HelperController.php b/packages/Webkul/Bulkupload/src/Http/Controllers/Admin/HelperController.php similarity index 52% rename from src/Http/Controllers/Admin/HelperController.php rename to packages/Webkul/Bulkupload/src/Http/Controllers/Admin/HelperController.php index dd0406b..575d133 100644 --- a/src/Http/Controllers/Admin/HelperController.php +++ b/packages/Webkul/Bulkupload/src/Http/Controllers/Admin/HelperController.php @@ -2,106 +2,16 @@ namespace Webkul\Bulkupload\Http\Controllers\Admin; +use Illuminate\Support\Facades\Storage; use Webkul\Admin\Imports\DataGridImport; -use Maatwebsite\Excel\Validators\Failure; use Webkul\Bulkupload\Helpers\ImportProduct; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Bulkupload\Repositories\DataFlowProfileRepository; -use Webkul\Bulkupload\Repositories\Products\SimpleProductRepository; -use Webkul\Bulkupload\Repositories\Products\ConfigurableProductRepository; -use Webkul\Bulkupload\Repositories\Products\VirtualProductRepository; -use Webkul\Bulkupload\Repositories\Products\DownloadableProductRepository; -use Webkul\Bulkupload\Repositories\Products\GroupedProductRepository; -use Webkul\Bulkupload\Repositories\Products\BundledProductRepository; -use Webkul\Bulkupload\Repositories\Products\BookingProductRepository; +use Webkul\Bulkupload\Requests\ImportProductRequest; +use Webkul\Bulkupload\Repositories\{ImportProductRepository, DataFlowProfileRepository}; +use Webkul\Bulkupload\Repositories\Products\{SimpleProductRepository, ConfigurableProductRepository, VirtualProductRepository}; +use Webkul\Bulkupload\Repositories\Products\{DownloadableProductRepository, GroupedProductRepository, BundledProductRepository, BookingProductRepository}; class HelperController extends Controller { - - /** - * SimpleProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\SimpleProductRepository - * - */ - protected $simpleProductRepository; - - /** - * ConfigurableProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\ConfigurableProductRepository - * - */ - protected $configurableProductRepository; - - /** - * VirtualProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\VirtualProductRepository; - * - */ - protected $virtualProductRepository; - - /** - * DownloadableProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\DownloadableProductRepository - * - */ - protected $downloadableProductRepository; - - /** - * BundledProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\BundledProductRepository - * - */ - protected $bundledProductRepository; - - /** - * BookingProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\BookingProductRepository - * - */ - protected $bookingProductRepository; - - /** - * GroupedProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\GroupedProductRepository - * - */ - protected $groupedProductRepository; - - /** - * DataFlowProfileRepository object - * - * @var \Webkul\Bulkupload\Repositories\DataFlowProfileRepository - * - */ - protected $dataFlowProfileRepository; - - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - * - */ - protected $importProductRepository; - - /** - * @var array - */ - protected $product = []; - - /** - * ImportProduct helper - * - * @var \Webkul\Bulkupload\Helpers\ImportProduct - */ - protected $importProduct; - /** * Create a new controller instance. * @@ -119,65 +29,50 @@ class HelperController extends Controller * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - DataFlowProfileRepository $dataFlowProfileRepository, - SimpleProductRepository $simpleProductRepository, - ConfigurableProductRepository $configurableProductRepository, - VirtualProductRepository $virtualProductRepository, - DownloadableProductRepository $downloadableProductRepository, - BundledProductRepository $bundledProductRepository, - BookingProductRepository $bookingProductRepository, - GroupedProductRepository $groupedProductRepository, - ImportProduct $importProduct - ) - { - $this->importProductRepository = $importProductRepository; - - $this->dataFlowProfileRepository = $dataFlowProfileRepository; - - $this->simpleProductRepository = $simpleProductRepository; - - $this->configurableProductRepository = $configurableProductRepository; - - $this->virtualProductRepository = $virtualProductRepository; - - $this->downloadableProductRepository = $downloadableProductRepository; - - $this->bundledProductRepository = $bundledProductRepository; - - $this->bookingProductRepository = $bookingProductRepository; - - $this->groupedProductRepository = $groupedProductRepository; - - $this->importProduct = $importProduct; - } + protected ImportProductRepository $importProductRepository, + protected DataFlowProfileRepository $dataFlowProfileRepository, + protected SimpleProductRepository $simpleProductRepository, + protected ConfigurableProductRepository $configurableProductRepository, + protected VirtualProductRepository $virtualProductRepository, + protected DownloadableProductRepository $downloadableProductRepository, + protected BundledProductRepository $bundledProductRepository, + protected BookingProductRepository $bookingProductRepository, + protected GroupedProductRepository $groupedProductRepository, + protected ImportProduct $importProduct + ) {} /** * Download sample files. * - * @return \Illuminate\Http\Response + * @return \Symfony\Component\HttpFoundation\Response|void */ public function downloadFile() { - $items = []; - - foreach (config('product_types') as $item) { - $item['children'] = []; + if (! request()->filled('download_sample')) { + session()->flash('error', __('bulkupload::app.admin.bulk-upload.upload-files.select-sample-file')); - array_push($items, $item); + return redirect()->back(); } + $items = array_values(array_map(function($item) { + $item['children'] = []; + return $item; + }, config('product_types'))); + $types = core()->sortItems($items); - foreach ($types as $key => $productType) { - if (request()->download_sample == $key.'-csv') { - return response()->download(public_path('storage/downloads/sample-files/bulk'.$key.'productupload.csv')); - } else if (request()->download_sample == $key.'-xls') { - return response()->download(public_path('storage/downloads/sample-files/bulk'.$key.'productupload.xlsx')); - } else if (empty(request()->download_sample)) { - return redirect()->back(); - } + foreach ($types as $productType) { + if (request()->input('download_sample') == $productType['key'] . '-csv') { + + return response()->download(public_path('storage/downloads/sample-files/bulk'.$productType['key'] .'productupload.csv')); + + } else if (request()->input('download_sample') == $productType['key'] . '-xls') { + + return response()->download(public_path('storage/downloads/sample-files/bulk'.$productType['key'] .'productupload.xlsx')); + } } + + return redirect()->back(); } /** @@ -187,9 +82,7 @@ public function downloadFile() */ public function getAllDataFlowProfiles() { - $attribute_family_id = request()->attribute_family_id; - - $dataFlowProfiles = $this->dataFlowProfileRepository->findByField('attribute_family_id', request()->attribute_family_id); + $dataFlowProfiles = $this->dataFlowProfileRepository->findByField('attribute_family_id', request()->input('attribute_family_id')); return ['dataFlowProfiles' => $dataFlowProfiles]; } @@ -197,15 +90,15 @@ public function getAllDataFlowProfiles() /** * Read count of records in CSV/XLSX * - * @return \Illuminate\Http\Response + * @return integer|void */ public function readCSVData() { $countCSV = 0; - $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', request()->data_flow_profile_id); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', request()->input('data_flow_profile_id')); - $this->dataFlowProfileRepository->update(['run_status' => '1'], request()->data_flow_profile_id); + $this->dataFlowProfileRepository->update(['run_status' => '1'], request()->input('data_flow_profile_id')); if ($dataFlowProfileRecord) { $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -223,40 +116,26 @@ public function readCSVData() } /** - * store import products for profile execution + * Store import products for profile execution * * @return \Illuminate\Http\Response */ - public function importNewProductsStore() + public function importNewProductsStore(ImportProductRequest $importProductRequest) { - $dataFlowProfileId = request()->data_flow_profile; - - if ($dataFlowProfileId) { - $importedProducts = $this->importProduct->store(); - - return $importedProducts; - } else { - session()->flash('error', trans('bulkupload::app.admin.bulk-upload.messages.data-profile-not-selected')); - - return back(); - } + return $this->importProduct->store(); } /** - * profile execution to upload products + * Profile execution to upload products * - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\JsonResponse|void */ public function runProfile() { - $data_flow_profile_id = request()->data_flow_profile_id; - $numberOfCSVRecord = request()->numberOfCSVRecord; - $countOfStartedProfiles = request()->countOfStartedProfiles; $product = []; $imageZipName = null; - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $data_flow_profile_id); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', request()->input('data_flow_profile_id')); if ($dataFlowProfileRecord) { $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -265,16 +144,15 @@ public function runProfile() $imageZipName = $this->storeImageZip($dataFlowProfileRecord); } - if ($numberOfCSVRecord >= 0) { - for ($i = $countOfStartedProfiles; $i < count($csvData); $i++) { + if ((int) request()->input('numberOfCSVRecord') >= 0) { + for ($i = (int) request()->input('countOfStartedProfiles'); $i < count($csvData); $i++) { $product['loopCount'] = $i; - switch($csvData[$i]['type']) { + switch ($csvData[$i]['type']) { case "simple": $simpleProduct = $this->simpleProductRepository->createProduct(request()->all(), $imageZipName, $product); return response()->json($simpleProduct); - case "virtual": $virtualProduct = $this->virtualProductRepository->createProduct(request()->all(), $imageZipName); diff --git a/src/Models/DataFlowProfile.php b/packages/Webkul/Bulkupload/src/Models/DataFlowProfile.php similarity index 100% rename from src/Models/DataFlowProfile.php rename to packages/Webkul/Bulkupload/src/Models/DataFlowProfile.php diff --git a/src/Models/DataFlowProfileProxy.php b/packages/Webkul/Bulkupload/src/Models/DataFlowProfileProxy.php similarity index 100% rename from src/Models/DataFlowProfileProxy.php rename to packages/Webkul/Bulkupload/src/Models/DataFlowProfileProxy.php diff --git a/src/Models/ImportProduct.php b/packages/Webkul/Bulkupload/src/Models/ImportProduct.php similarity index 78% rename from src/Models/ImportProduct.php rename to packages/Webkul/Bulkupload/src/Models/ImportProduct.php index 387a540..f2aba73 100644 --- a/src/Models/ImportProduct.php +++ b/packages/Webkul/Bulkupload/src/Models/ImportProduct.php @@ -7,7 +7,10 @@ class ImportProduct extends Model implements ImportProductContract { - protected $table = "import_products"; - + /** + * Define guarded property + * + * @var array + */ protected $guarded = []; } diff --git a/src/Models/ImportProductProxy.php b/packages/Webkul/Bulkupload/src/Models/ImportProductProxy.php similarity index 100% rename from src/Models/ImportProductProxy.php rename to packages/Webkul/Bulkupload/src/Models/ImportProductProxy.php diff --git a/src/Providers/BulkUploadServiceProvider.php b/packages/Webkul/Bulkupload/src/Providers/BulkUploadServiceProvider.php similarity index 86% rename from src/Providers/BulkUploadServiceProvider.php rename to packages/Webkul/Bulkupload/src/Providers/BulkUploadServiceProvider.php index 64d5a18..151cc44 100644 --- a/src/Providers/BulkUploadServiceProvider.php +++ b/packages/Webkul/Bulkupload/src/Providers/BulkUploadServiceProvider.php @@ -3,12 +3,13 @@ namespace Webkul\Bulkupload\Providers; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\Event; class BulkUploadServiceProvider extends ServiceProvider { public function boot() { - include __DIR__ . '/../Http/admin-routes.php'; + include __DIR__ . '/../Routes/web.php'; $this->app->register(ModuleServiceProvider::class); $this->app->register(EventServiceProvider::class); @@ -26,6 +27,10 @@ public function boot() $this->publishes([ __DIR__ . '/../Resources/views/admin/bulk-upload/layouts/nav-aside.blade.php' => resource_path('views/vendor/admin/layouts/nav-left.blade.php'), ]); + + Event::listen('bagisto.admin.layout.head', function($viewRenderEventManager) { + $viewRenderEventManager->addTemplate('bulkupload::admin.layouts.style'); + }); view()->composer(['bulkupload::admin.bulk-upload.upload-files.index'], function ($view) { $items = []; diff --git a/src/Providers/EventServiceProvider.php b/packages/Webkul/Bulkupload/src/Providers/EventServiceProvider.php similarity index 100% rename from src/Providers/EventServiceProvider.php rename to packages/Webkul/Bulkupload/src/Providers/EventServiceProvider.php diff --git a/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Bulkupload/src/Providers/ModuleServiceProvider.php similarity index 100% rename from src/Providers/ModuleServiceProvider.php rename to packages/Webkul/Bulkupload/src/Providers/ModuleServiceProvider.php diff --git a/src/Repositories/BulkProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/BulkProductRepository.php similarity index 96% rename from src/Repositories/BulkProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/BulkProductRepository.php index f8d9d18..03eeade 100644 --- a/src/Repositories/BulkProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/BulkProductRepository.php @@ -94,14 +94,13 @@ public function productRepositoryUpdateForVariants(array $data, $id, $attribute $product = $this->find($id); - $configurable = app('Webkul\Product\Type\Configurable'); - - if ($product->parent_id && $configurable->checkVariantOptionAvailabiliy($data, $product)) { + if ($product->parent_id) { $data['parent_id'] = NULL; } $product->update($data); + $attributes = $product->attribute_family->custom_attributes; foreach ($attributes as $attribute) { @@ -175,6 +174,7 @@ public function productRepositoryUpdateForVariants(array $data, $id, $attribute } $previousVariantIds = $product->variants->pluck('id'); + if (isset($data['variants'])) { foreach ($data['variants'] as $variantId => $variantData) { if (str_contains($variantId, 'variant_')) { @@ -183,7 +183,7 @@ public function productRepositoryUpdateForVariants(array $data, $id, $attribute $permutation[$superAttribute->id] = $variantData[$superAttribute->code]; } - $this->productRepository>createVariant($product, $permutation, $variantData); + $this->productRepository->createVariant($product, $permutation, $variantData); } else { if (is_numeric($index = $previousVariantIds->search($variantId))) { $previousVariantIds->forget($index); diff --git a/src/Repositories/DataFlowProfileRepository.php b/packages/Webkul/Bulkupload/src/Repositories/DataFlowProfileRepository.php similarity index 100% rename from src/Repositories/DataFlowProfileRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/DataFlowProfileRepository.php diff --git a/src/Repositories/ImportProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/ImportProductRepository.php similarity index 100% rename from src/Repositories/ImportProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/ImportProductRepository.php diff --git a/src/Repositories/ProductImageRepository.php b/packages/Webkul/Bulkupload/src/Repositories/ProductImageRepository.php similarity index 100% rename from src/Repositories/ProductImageRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/ProductImageRepository.php diff --git a/src/Repositories/Products/BookingProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/BookingProductRepository.php similarity index 83% rename from src/Repositories/Products/BookingProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/BookingProductRepository.php index 85dfee3..95e953d 100644 --- a/src/Repositories/Products/BookingProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/BookingProductRepository.php @@ -2,80 +2,16 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Storage; -use Webkul\Core\Eloquent\Repository; -use Illuminate\Container\Container as App; +use Illuminate\Support\Facades\{Validator, Event, Storage, Log}; use Webkul\Admin\Imports\DataGridImport; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\Event; +use Webkul\Core\Eloquent\Repository; use Webkul\Category\Repositories\CategoryRepository; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Product\Repositories\ProductCustomerGroupPriceRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository}; +use Webkul\Attribute\Repositories\{AttributeOptionRepository, AttributeFamilyRepository}; +use Webkul\Bulkupload\Repositories\{ProductImageRepository, Products\HelperRepository, ImportProductRepository}; class BookingProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - /** * Create a new repository instance. * @@ -91,32 +27,15 @@ class BookingProductRepository extends Repository * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - AttributeOptionRepository $attributeOptionRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->categoryRepository = $categoryRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->helperRepository = $helperRepository; - } + protected ImportProductRepository $importProductRepository, + protected CategoryRepository $categoryRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected HelperRepository $helperRepository, + protected ProductImageRepository $productImageRepository, + protected AttributeOptionRepository $attributeOptionRepository + ) {} /* * Specify Model class name @@ -139,8 +58,7 @@ function model() public function createProduct($requestData, $imageZipName) { try { - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -163,7 +81,7 @@ public function createProduct($requestData, $imageZipName) return $invalidateProducts; } } - } else if ($requestData['numberOfCSVRecord'] <= 10) { + } elseif ($requestData['numberOfCSVRecord'] <= 10) { for ($i = $requestData['countOfStartedProfiles']; $i < $processRecords; $i++) { $invalidateProducts = $this->store($csvData[$i], $i, $dataFlowProfileRecord, $requestData, $imageZipName); @@ -195,7 +113,7 @@ public function createProduct($requestData, $imageZipName) return $dataToBeReturn; } catch(\Exception $e) { - \Log::error('booking create product log: '. $e->getMessage()); + Log::error('booking create product log: '. $e->getMessage()); $categoryError = explode('[' ,$e->getMessage()); $categorySlugError = explode(']' ,$e->getMessage()); @@ -216,7 +134,7 @@ public function createProduct($requestData, $imageZipName) 'error' => "Invalid Category Slug: " . $categorySlugError[1], ); $categoryError[0] = null; - } else if (isset($e->errorInfo)) { + } elseif (isset($e->errorInfo)) { $dataToBeReturn = array( 'remainDataInCSV' => $remainDataInCSV, 'productsUploaded' => $productsUploaded, @@ -268,10 +186,8 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['type'] = $csvData['type']; $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData['sku']; - Event::dispatch('catalog.product.create.before'); - $bookingProductData = $this->productRepository->create($data); - Event::dispatch('catalog.product.create.after', $bookingProductData); + $bookingProductData = $this->productRepository->create($data); } else { $bookingProductData = $productData; } @@ -303,7 +219,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image } } - $data['dataFlowProfileRecordId'] = $dataFlowProfileRecord->id; + $data['dataFlowProfileRecordId'] = $dataFlowProfileRecord->data_flow_profile_id; $categoryData = explode(',', $csvData['categories_slug']); @@ -321,6 +237,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['channel'] = core()->getCurrentChannel()->code; $dataProfile = app('Webkul\Bulkupload\Repositories\DataFlowProfileRepository')->findOneByfield(['id' => $data['dataFlowProfileRecordId']]); + $data['locale'] = $dataProfile->locale_code; //customerGroupPricing @@ -329,20 +246,31 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image app(ProductCustomerGroupPriceRepository::class)->saveCustomerGroupPrices($data, $simpleproductData); } - //booking product attributes - if (strtolower($csvData['booking_type']) == "default") { - $booking = $this->defaultBookingType($csvData); - } else if (strtolower($csvData['booking_type']) == "appointment") { - $booking = $this->appointmentBookingType($csvData); - } else if (strtolower($csvData['booking_type']) == "event") { - $booking = $this->eventBookingType($csvData); - } else if (strtolower($csvData['booking_type']) == "rental") { - $booking = $this->rentalBookingType($csvData); - } else if (strtolower($csvData['booking_type']) == "table") { - $booking = $this->tableBookingType($csvData); - } else { - \Log::error('booking type not found'); + switch (strtolower($csvData['booking_type'])) { + case 'default': + $booking = $this->defaultBookingType($csvData); + break; + + case 'appointment': + $booking = $this->appointmentBookingType($csvData); + break; + + case 'event': + $booking = $this->eventBookingType($csvData); + break; + + case 'rental': + $booking = $this->rentalBookingType($csvData); + break; + + case 'table': + $booking = $this->tableBookingType($csvData); + break; + + default: + $booking = []; + break; } $data['booking'] = $booking; @@ -360,7 +288,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['images'][$imageArraykey] = $imagePath; } } - } else if (isset($csvData['images'])) { + } elseif (isset($csvData['images'])) { foreach ($individualProductimages as $imageArraykey => $imageURL) { if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { @@ -419,17 +347,19 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image request()->request->add(['booking' => $booking]); - Event::dispatch('catalog.product.update.before', $bookingProductData->id); - $configBookingProduct = $this->productRepository->update($data, $bookingProductData->id); - Event::dispatch('catalog.product.update.after',$configBookingProduct); + Event::dispatch('catalog.product.update.before', $bookingProductData->id); + + $bookingProductUpdate = $this->productRepository->update($data, $bookingProductData->id); + + Event::dispatch('catalog.product.update.after', $bookingProductUpdate); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $bookingProductData, $imageZipName); - } else if (isset($csvData['images'])) { + } elseif (isset($csvData['images'])) { $this->productImageRepository->bulkuploadImages($data, $bookingProductData, $imageZipName = null); } } catch(\Exception $e) { - \Log::error('booking product store function'. $e->getMessage()); + Log::error('booking product store function '. $e->getMessage()); } } @@ -443,7 +373,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image public function defaultBookingType($data) { try { - if (isset($data['booking_slot_from']) && !empty($data['booking_slot_from'])) { + if (isset($data['booking_slot_from']) && ! empty($data['booking_slot_from'])) { $slot = $this->prepareDefaultBookingSlots($data); } @@ -457,7 +387,7 @@ public function defaultBookingType($data) $availableFrom = explode(',', $data['booking_available_from']); - foreach ($availableFrom as $key => $availableDateTime) { + foreach ($availableFrom as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableFrom["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -468,7 +398,7 @@ public function defaultBookingType($data) $availableTo = explode(',' , $data['booking_available_to']); - foreach ($availableTo as $key => $availableDateTime) { + foreach ($availableTo as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableTo["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -494,7 +424,7 @@ public function defaultBookingType($data) return $booking; } catch (\Exception $e) { - \Log::error('booking defaultBookingType log: '. $e->getMessage()); + Log::error('booking defaultBookingType log: '. $e->getMessage()); } } @@ -508,7 +438,7 @@ public function defaultBookingType($data) public function appointmentBookingType($data) { try { - if (isset($data['booking_slot_from']) && !empty($data['booking_slot_from'])) { + if (isset($data['booking_slot_from']) && ! empty($data['booking_slot_from'])) { $slot = $this->prepareAppointmentBookingSlots($data); } @@ -525,7 +455,7 @@ public function appointmentBookingType($data) } else { $availableFrom = explode(',', $data['booking_available_from']); - foreach ($availableFrom as $key => $availableDateTime) { + foreach ($availableFrom as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableFrom["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -536,7 +466,7 @@ public function appointmentBookingType($data) $availableTo = explode(',' , $data['booking_available_to']); - foreach ($availableTo as $key => $availableDateTime) { + foreach ($availableTo as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableTo["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -564,12 +494,12 @@ public function appointmentBookingType($data) return $appointment; } catch (\Exception $e) { - \Log::error('booking appointmentBookingType log: '. $e->getMessage()); + Log::error('booking appointmentBookingType log: '. $e->getMessage()); } } /** - * prepare data for event booking-type + * Prepare data for event booking-type * * @param array $data * @@ -584,7 +514,7 @@ public function eventBookingType($data) $availableFrom = explode(',', $data['booking_available_from']); - foreach ($availableFrom as $key => $availableDateTime) { + foreach ($availableFrom as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableFrom["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -595,7 +525,7 @@ public function eventBookingType($data) $availableTo = explode(',' , $data['booking_available_to']); - foreach ($availableTo as $key => $availableDateTime) { + foreach ($availableTo as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableTo["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -617,7 +547,7 @@ public function eventBookingType($data) return $booking; } catch (\Exception $e) { - \Log::error('booking eventBookingType log: '. $e->getMessage()); + Log::error('booking eventBookingType log: '. $e->getMessage()); } } @@ -636,7 +566,7 @@ public function rentalBookingType($data) $availableFrom = explode(',', $data['booking_available_from']); - foreach ($availableFrom as $key => $availableDateTime) { + foreach ($availableFrom as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableFrom["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -647,7 +577,7 @@ public function rentalBookingType($data) $availableTo = explode(',' , $data['booking_available_to']); - foreach ($availableTo as $key => $availableDateTime) { + foreach ($availableTo as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableTo["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -671,7 +601,7 @@ public function rentalBookingType($data) "renting_type" => "daily", "daily_price" => $data['daily_price'] ?? 0, ]; - } else if ($data['renting_type'] == "hourly") { + } elseif ($data['renting_type'] == "hourly") { $slot = $this->prepareRentalBookingSlots($data); $booking = [ @@ -687,7 +617,7 @@ public function rentalBookingType($data) if (! empty($slot)) { $booking['slots'] = $slot; } - } else if ($data['renting_type'] == "daily_hourly") { + } elseif ($data['renting_type'] == "daily_hourly") { $slot = $this->prepareRentalBookingSlots($data); if (trim(strtolower($data['same_slot_all_days'])) == "no" || empty($data['same_slot_all_days'])) { @@ -712,7 +642,7 @@ public function rentalBookingType($data) return $booking; } catch (\Exception $e) { - \Log::error('booking rentalBookingType log: '. $e->getMessage()); + Log::error('booking rentalBookingType log: '. $e->getMessage()); } } @@ -731,7 +661,7 @@ public function tableBookingType($data) $availableFrom = explode(',', $data['booking_available_from']); - foreach ($availableFrom as $key => $availableDateTime) { + foreach ($availableFrom as $availableDateTime) { $dateFormat = str_replace('/', '-', $availableFrom["0"]); $date = date('Y-m-d', strtotime($dateFormat)); @@ -785,7 +715,7 @@ public function tableBookingType($data) return $booking; } catch (\Exception $e) { - \Log::error('booking tableBookingType log: '. $e->getMessage()); + Log::error('booking tableBookingType log: '. $e->getMessage()); } } @@ -794,7 +724,7 @@ public function tableBookingType($data) * * @param array $data * - * @return array + * @return array|void */ public function prepareDefaultBookingSlots($record) { @@ -838,7 +768,7 @@ public function prepareDefaultBookingSlots($record) return $slotter; } catch(\Exception $e) { - \Log::error('booking prepareDefaultBookingSlots log: '. $e->getMessage()); + Log::error('booking prepareDefaultBookingSlots log: '. $e->getMessage()); } } @@ -847,7 +777,7 @@ public function prepareDefaultBookingSlots($record) * * @param array $data * - * @return array + * @return array|void */ public function prepareAppointmentBookingSlots($record) { @@ -881,7 +811,7 @@ public function prepareAppointmentBookingSlots($record) return $slotter; } catch (\Exception $e) { - \Log::error('booking prepareAppointmentBookingSlots log: '. $e->getMessage()); + Log::error('booking prepareAppointmentBookingSlots log: '. $e->getMessage()); } } @@ -890,7 +820,7 @@ public function prepareAppointmentBookingSlots($record) * * @param array $data * - * @return array + * @return array|void */ public function prepareEventBookingTickets($record) { @@ -913,7 +843,7 @@ public function prepareEventBookingTickets($record) return $slotter; } catch (\Exception $e) { - \Log::error('booking prepareEventBookingTickets log: '. $e->getMessage()); + Log::error('booking prepareEventBookingTickets log: '. $e->getMessage()); } } @@ -922,7 +852,7 @@ public function prepareEventBookingTickets($record) * * @param array $data * - * @return array + * @return array|void */ public function prepareRentalBookingSlots($record) { @@ -958,7 +888,7 @@ public function prepareRentalBookingSlots($record) return $slotter; } catch (\Exception $e) { - \Log::error('booking prepareRentalBookingSlots log: '. $e->getMessage()); + Log::error('booking prepareRentalBookingSlots log: '. $e->getMessage()); } } @@ -967,7 +897,7 @@ public function prepareRentalBookingSlots($record) * * @param array $data * - * @return array + * @return array|void */ public function prepareTableBookingSlots($record) { @@ -1003,7 +933,7 @@ public function prepareTableBookingSlots($record) return $slotter; } catch (\Exception $e) { - \Log::error('booking prepareTableBookingSlots log: '. $e->getMessage()); + Log::error('booking prepareTableBookingSlots log: '. $e->getMessage()); } } } \ No newline at end of file diff --git a/src/Repositories/Products/BundledProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/BundledProductRepository.php similarity index 76% rename from src/Repositories/Products/BundledProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/BundledProductRepository.php index af8af57..94c5b5b 100644 --- a/src/Repositories/Products/BundledProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/BundledProductRepository.php @@ -2,80 +2,16 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Storage; -use Illuminate\Container\Container as App; -use Webkul\Core\Eloquent\Repository; +use Illuminate\Support\Facades\{Validator, Event, Storage}; use Webkul\Admin\Imports\DataGridImport; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\Event; +use Webkul\Core\Eloquent\Repository; use Webkul\Category\Repositories\CategoryRepository; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; -use Webkul\Product\Repositories\ProductCustomerGroupPriceRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository}; +use Webkul\Attribute\Repositories\{AttributeOptionRepository, AttributeFamilyRepository}; +use Webkul\Bulkupload\Repositories\{ProductImageRepository, Products\HelperRepository, ImportProductRepository}; class BundledProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - /** * Create a new repository instance. * @@ -91,32 +27,15 @@ class BundledProductRepository extends Repository * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - AttributeOptionRepository $attributeOptionRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->categoryRepository = $categoryRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->helperRepository = $helperRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - } + protected ImportProductRepository $importProductRepository, + protected CategoryRepository $categoryRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected HelperRepository $helperRepository, + protected ProductImageRepository $productImageRepository, + protected AttributeOptionRepository $attributeOptionRepository + ) {} /* * Specify Model class name @@ -139,8 +58,7 @@ function model() public function createProduct($requestData, $imageZipName) { try { - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -157,15 +75,15 @@ public function createProduct($requestData, $imageZipName) for ($i = $requestData['countOfStartedProfiles']; $i < $uptoProcessCSVRecords; $i++) { $invalidateProducts = $this->store($csvData[$i], $i, $dataFlowProfileRecord, $requestData, $imageZipName); - if (isset($invalidateProducts) && !empty($invalidateProducts)) { + if (isset($invalidateProducts) && ! empty($invalidateProducts)) { return $invalidateProducts; } } - } else if ($requestData['numberOfCSVRecord'] <= 10) { + } elseif ($requestData['numberOfCSVRecord'] <= 10) { for ($i = $requestData['countOfStartedProfiles']; $i < $processRecords; $i++) { $invalidateProducts = $this->store($csvData[$i], $i, $dataFlowProfileRecord, $requestData, $imageZipName); - if (isset($invalidateProducts) && !empty($invalidateProducts)) { + if (isset($invalidateProducts) && ! empty($invalidateProducts)) { return $invalidateProducts; } } @@ -212,7 +130,7 @@ public function createProduct($requestData, $imageZipName) 'error' => "Invalid Category Slug: " . $categorySlugError[1], ); $categoryError[0] = null; - } else if (isset($e->errorInfo)) { + } elseif (isset($e->errorInfo)) { $dataToBeReturn = array( 'remainDataInCSV' => $remainDataInCSV, 'productsUploaded' => $productsUploaded, @@ -261,9 +179,8 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['type'] = $csvData['type']; $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData['sku']; - Event::dispatch('catalog.product.create.before'); + $bundledProduct = $this->productRepository->create($data); - Event::dispatch('catalog.product.create.after', $bundledProduct); } else { $bundledProduct = $productData; } @@ -339,13 +256,13 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['images'][$imageArraykey] = $imagePath; } } - } else if (isset($csvData['images'])) { + } elseif (isset($csvData['images'])) { foreach ($individualProductimages as $imageArraykey => $imageURL) { if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { $imagePath = storage_path('app/public/imported-products/extracted-images/admin/'.$dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } @@ -395,13 +312,15 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image return $dataToBeReturn; } - Event::dispatch('catalog.product.update.before', $bundledProduct->id); - $configBundledProduct = $this->productRepository->update($data, $bundledProduct->id); - Event::dispatch('catalog.product.update.after',$configBundledProduct); + Event::dispatch('catalog.product.update.before', $bundledProduct->id); + + $updateBundleProduct = $this->productRepository->update($data, $bundledProduct->id); + + Event::dispatch('catalog.product.update.after', $updateBundleProduct); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $bundledProduct, $imageZipName); - } else if (isset($csvData['images'])) { + } elseif (isset($csvData['images'])) { $this->productImageRepository->bulkuploadImages($data, $bundledProduct, $imageZipName = null); } } diff --git a/src/Repositories/Products/ConfigurableProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/ConfigurableProductRepository.php similarity index 84% rename from src/Repositories/Products/ConfigurableProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/ConfigurableProductRepository.php index 5bafb62..427493d 100644 --- a/src/Repositories/Products/ConfigurableProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/ConfigurableProductRepository.php @@ -2,152 +2,48 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Facades\DB; -use Illuminate\Container\Container as App; +use Illuminate\Support\Facades\{Storage, DB, Event, Validator, Schema}; use Webkul\Admin\Imports\DataGridImport; -use Illuminate\Support\Facades\Schema; -use Webkul\Category\Repositories\CategoryRepository; use Webkul\Product\Models\ProductAttributeValue; use Webkul\Core\Eloquent\Repository; -use Illuminate\Support\Facades\Event; +use Webkul\Category\Repositories\CategoryRepository; use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Illuminate\Support\Facades\Validator; -use Webkul\Product\Repositories\ProductInventoryRepository; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; -use Webkul\Bulkupload\Repositories\BulkProductRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository, ProductInventoryRepository}; +use Webkul\Attribute\Repositories\{AttributeRepository, AttributeFamilyRepository, AttributeOptionRepository}; +use Webkul\Bulkupload\Repositories\{ProductImageRepository, Products\HelperRepository, BulkProductRepository}; class ConfigurableProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * ProductInventoryRepository object - * - * @var \Webkul\Product\Repositories\ProductInventoryRepository - */ - protected $productInventoryRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * BulkProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\BulkProductRepository - */ - protected $bulkProductRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - /** * Create a new repository instance. * - * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository + * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @param \Webkul\Product\Repositories\ProductRepository $productRepository - * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository + * @param \Webkul\Product\Repositories\ProductInventoryRepository $productInventoryRepository * @param \Webkul\Attribute\Repositories\AttributeRepository $attributeRepository - * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository + * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository + * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository * @param \Webkul\Bulkupload\Repositories\ProductImageRepository $productImageRepository + * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository * @param \Webkul\Bulkupload\Repositories\BulkProductRepository $bulkProductRepository - * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository - * @param \Webkul\Product\Repositories\ProductInventoryRepository $productInventoryRepository * * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - AttributeRepository $attributeRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - BulkProductRepository $bulkProductRepository, - AttributeOptionRepository $attributeOptionRepository, - ProductInventoryRepository $productInventoryRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->categoryRepository = $categoryRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->attributeRepository = $attributeRepository; - - $this->productInventoryRepository = $productInventoryRepository; - - $this->helperRepository = $helperRepository; - - $this->bulkProductRepository = $bulkProductRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - } + protected CategoryRepository $categoryRepository, + protected ImportProductRepository $importProductRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected ProductInventoryRepository $productInventoryRepository, + protected AttributeRepository $attributeRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected AttributeOptionRepository $attributeOptionRepository, + protected ProductImageRepository $productImageRepository, + protected HelperRepository $helperRepository, + protected BulkProductRepository $bulkProductRepository, + ) {} /* * Specify Model class name @@ -171,14 +67,7 @@ function model() public function createProduct($requestData, $imageZipName, $product) { try { - if ($requestData['totalNumberOfCSVRecord'] < 1000) { - $processCSVRecords = $requestData['totalNumberOfCSVRecord']/($requestData['totalNumberOfCSVRecord']/10); - } else { - $processCSVRecords = $requestData['totalNumberOfCSVRecord']/($requestData['totalNumberOfCSVRecord']/100); - } - - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); if ($dataFlowProfileRecord) { $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -192,7 +81,7 @@ public function createProduct($requestData, $imageZipName, $product) try { $createValidation = $this->helperRepository->createProductValidation($csvData[$i], $i); - if ( isset($createValidation)) { + if (isset($createValidation)) { return $createValidation; } @@ -203,9 +92,7 @@ public function createProduct($requestData, $imageZipName, $product) 'url_key' => $csvData[$i]['url_key'] ]); - $productData = $this->productRepository->findOneWhere([ - 'sku' => $csvData[$i]['sku'] - ]); + $productData = $this->productRepository->findOneWhere(['sku' => $csvData[$i]['sku']]); $attributeFamilyData = $this->attributeFamilyRepository->findOneByfield('name', $csvData[$i]['attribute_family_name']); @@ -214,14 +101,13 @@ public function createProduct($requestData, $imageZipName, $product) $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData[$i]['sku']; - Event::dispatch('catalog.product.create.before'); - $configSimpleproduct = $this->productRepository->create($data); - Event::dispatch('catalog.product.create.after', $configSimpleproduct); + $product = $this->bulkProductRepository->create($data); } else { $product = $productData; } unset($data); + $data = []; $attributeCode = []; $attributeValue = []; @@ -299,11 +185,11 @@ public function createProduct($requestData, $imageZipName, $product) if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { $imagePath = storage_path('app/public/ imported-products/extracted-images/admin/'. $dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } - $imageFile = $imagePath.'/'.basename($imageURL) ; + $imageFile = $imagePath.'/'.basename($imageURL); file_put_contents($imageFile, file_get_contents (trim($imageURL))); @@ -312,7 +198,11 @@ public function createProduct($requestData, $imageZipName, $product) } } - $productAttributeStore = $this->bulkProductRepository->productRepositoryUpdateForVariants($data, $product->id); + Event::dispatch('catalog.product.update.before', $product->id); + + $productUpdate = $this->productRepository->update($data, $product->id); + + Event::dispatch('catalog.product.update.after', $productUpdate); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $product, $imageZipName); @@ -326,8 +216,6 @@ public function createProduct($requestData, $imageZipName, $product) $product['productFlatId'] = $productFlatData->id; - $arr[] = $productFlatData->id; - unset($categoryID); } catch (\Exception $e) { $categoryError = explode('[' ,$e->getMessage()); @@ -346,8 +234,9 @@ public function createProduct($requestData, $imageZipName, $product) 'countOfStartedProfiles' => $requestData['countOfStartedProfiles'], 'error' => "Invalid Category Slug: " . $categorySlugError[1], ); + $categoryError[0] = null; - } else if (isset($e->errorInfo)) { + } elseif (isset($e->errorInfo)) { $dataToBeReturn = array( 'remainDataInCSV' => $remainDataInCSV, 'productsUploaded' => $requestData['productUploaded'], @@ -362,12 +251,12 @@ public function createProduct($requestData, $imageZipName, $product) 'error' => $e->getMessage(), ); } + return $dataToBeReturn; } - } else if (isset($product['productFlatId'])) { + } elseif (isset($product['productFlatId'])) { try { $current = $product['loopCount']; - $num = 0; $inventory = []; $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -381,10 +270,8 @@ public function createProduct($requestData, $imageZipName, $product) 'url_key' => null ]); - $productData = $this->productRepository->findOneWhere([ - 'sku' => $csvData[$i]['sku'] - ]); - + $productData = $this->productRepository->findOneWhere(['sku' => $csvData[$i]['sku']]); + $attributeFamilyData = $this->attributeFamilyRepository->findOneWhere([ 'name' => $csvData[$i]['attribute_family_name'] ]); @@ -395,7 +282,11 @@ public function createProduct($requestData, $imageZipName, $product) $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData[$i]['sku']; + Event::dispatch('catalog.product.create.before'); + $configSimpleproduct = $this->productRepository->create($data); + + Event::dispatch('catalog.product.create.after', $configSimpleproduct); } else { $configSimpleproduct = $productData; } @@ -439,7 +330,7 @@ public function createProduct($requestData, $imageZipName, $product) return $dataToBeReturn; } - + $inventory_data = core()->getCurrentChannel()->inventory_sources; foreach($inventory_data as $key => $datas) { @@ -497,15 +388,15 @@ public function createProduct($requestData, $imageZipName, $product) $data['width'] = (string)$csvData[$i]['width']; $data['height'] = (string)$csvData[$i]['height']; $data['depth'] = (string)$csvData[$i]['depth']; - $data['status'] = (string)$csvData[$i]['status']; $data['attribute_family_id'] = $attributeFamilyData->id; $data['short_description'] = (string)$csvData[$i]['short_description']; $data['sku'] = (string)$csvData[$i]['sku']; $data['name'] = (string)$csvData[$i]['name']; $data['weight'] = (string)$csvData[$i]['super_attribute_weight']; $data['status'] = (string)$csvData[$i]['status']; + $data['type'] = (string)$csvData[$i]['type']; - if ( isset($data['super_attributes'])) { + if (isset($data['super_attributes'])) { foreach ($data['super_attributes'] as $attributeCode => $attributeOptions) { $attribute = $this->attributeRepository->findOneByField('code', $attributeCode); @@ -538,7 +429,7 @@ public function createProduct($requestData, $imageZipName, $product) if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { $imagePath = storage_path('app/public/ imported-products/extracted-images/admin/'. $dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } @@ -551,7 +442,11 @@ public function createProduct($requestData, $imageZipName, $product) } } - $configSimpleProductAttributeStore = $this->bulkProductRepository->productRepositoryUpdateForVariants($data, $configSimpleproduct->id); + Event::dispatch('catalog.product.update.before', $configSimpleproduct->id); + + $configSimpleProductAttributeStore = $this->productRepository->update($data, $configSimpleproduct->id); + + Event::dispatch('catalog.product.update.after', $configSimpleProductAttributeStore); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $configSimpleproduct, $imageZipName); @@ -657,7 +552,9 @@ public function createFlat($product, $parentProduct = null) 'locale' => $locale->code ]); } + foreach ($familyAttributes[$product->attribute_family->id] as $attribute) { + if ($parentProduct && ! in_array($attribute->code, array_merge($superAttributes[$parentProduct->id], ['sku', 'name', 'price', 'weight', 'status']))) continue; @@ -684,11 +581,11 @@ public function createFlat($product, $parentProduct = null) if ($product->type == 'configurable' && $attribute->code == 'price') { try { $productFlat->{$attribute->code} = app('Webkul\Bulkupload\Helpers\Price')->getVariantMinPrice($product); - } catch(\Exception $e) {} + } catch (\Exception $e) {} } else { try { $productFlat->{$attribute->code} = $productAttributeValue[ProductAttributeValue::$attributeTypeFields[$attribute->type]]; - } catch(\Exception $e) {} + } catch (\Exception $e) {} } if ($attribute->type == 'select') { @@ -726,19 +623,9 @@ public function createFlat($product, $parentProduct = null) $productFlat->updated_at = $product->updated_at; - if ($parentProduct) { - $parentProductFlat = $this->productFlatRepository->findOneWhere([ - 'product_id' => $parentProduct->id, - 'channel' => $channel->code, - 'locale' => $locale->code - ]); - } - $productFlat->parent_id = $product->parent_id; $productFlat->save(); - - $product->parent_id--; } } } diff --git a/src/Repositories/Products/DownloadableProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/DownloadableProductRepository.php similarity index 84% rename from src/Repositories/Products/DownloadableProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/DownloadableProductRepository.php index 827ac8c..f5d51cb 100644 --- a/src/Repositories/Products/DownloadableProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/DownloadableProductRepository.php @@ -2,134 +2,42 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Storage; -use Illuminate\Container\Container as App; -use Webkul\Core\Eloquent\Repository; -use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\{Log, Validator, Event, Storage}; use Webkul\Admin\Imports\DataGridImport; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\Event; -use Webkul\Category\Repositories\CategoryRepository; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; +use Webkul\Core\Eloquent\Repository; use Webkul\Product\Repositories\ProductDownloadableLinkRepository; -use Webkul\Product\Repositories\ProductCustomerGroupPriceRepository; +use Webkul\Category\Repositories\CategoryRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository}; +use Webkul\Attribute\Repositories\{AttributeOptionRepository, AttributeFamilyRepository}; +use Webkul\Bulkupload\Repositories\{ProductImageRepository, Products\HelperRepository, ImportProductRepository}; class DownloadableProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * ProductDownloadableLinkRepository object - * - * @var \Webkul\Product\Repositories\ProductDownloadableLinkRepository - */ - protected $productDownloadableLinkRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - /** * Create a new repository instance. - * - * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository + * @param \Webkul\Product\Repositories\ProductDownloadableLinkRepository $productDownloadableLinkRepository * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @param \Webkul\Product\Repositories\ProductRepository $productRepository + * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository - * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository * @param \Webkul\Bulkupload\Repositories\ProductImageRepository $productImageRepository - * @param \Webkul\Product\Repositories\ProductDownloadableLinkRepository $productDownloadableLinkRepository - * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository + * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository + * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - ProductDownloadableLinkRepository $productDownloadableLinkRepository, - AttributeOptionRepository $attributeOptionRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->productDownloadableLinkRepository = $productDownloadableLinkRepository; - - $this->categoryRepository = $categoryRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->helperRepository = $helperRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - } + protected CategoryRepository $categoryRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected AttributeOptionRepository $attributeOptionRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected ProductImageRepository $productImageRepository, + protected HelperRepository $helperRepository, + protected ImportProductRepository $importProductRepository, + protected ProductDownloadableLinkRepository $ProductDownloadableLinkRepository, + ) {} /* * Specify Model class name @@ -151,13 +59,8 @@ function model() */ public function createProduct($requestData, $imageZipName) { - $uploadLinkFilesZipName = null; - $uploadSampleFilesZipName = null; - $uploadLinkSampleFilesZipName = null; - try { - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -176,7 +79,7 @@ public function createProduct($requestData, $imageZipName) for ($i = $requestData['countOfStartedProfiles']; $i < $uptoProcessCSVRecords; $i++) { $invalidateProducts = $this->store($csvData[$i], $i, $dataFlowProfileRecord, $requestData, $imageZipName, $downloadableLinks); - if (isset($invalidateProducts) && !empty($invalidateProducts)) { + if (isset($invalidateProducts) && ! empty($invalidateProducts)) { return $invalidateProducts; } } @@ -184,7 +87,7 @@ public function createProduct($requestData, $imageZipName) for ($i = $requestData['countOfStartedProfiles']; $i < $processRecords; $i++) { $invalidateProducts = $this->store($csvData[$i], $i, $dataFlowProfileRecord, $requestData, $imageZipName, $downloadableLinks); - if (isset($invalidateProducts) && !empty($invalidateProducts)) { + if (isset($invalidateProducts) && ! empty($invalidateProducts)) { return $invalidateProducts; } } @@ -285,7 +188,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $sampleType = explode(',', $csvData['sample_type']) ; $sampleFiles = explode(',', $csvData['sample_files']) ; $urlFiles = explode(',', $csvData['sample_url']) ; - $sampleSortOrder = !empty($csvData['sample_sort_order']) ? explode(',', $csvData['sample_sort_order']) : 0; + $sampleSortOrder = ! empty($csvData['sample_sort_order']) ? explode(',', $csvData['sample_sort_order']) : 0; } //for downloadable link explode @@ -295,15 +198,15 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $linkFileNames = explode(',', $csvData['link_file_names']); - $linkPrices = !empty($csvData['link_prices']) ? explode(',', $csvData['link_prices']) : ""; + $linkPrices = ! empty($csvData['link_prices']) ? explode(',', $csvData['link_prices']) : ""; - $linkSampleTypes = !empty($csvData['link_sample_types']) ? explode(',', $csvData['link_sample_types']) : "file"; + $linkSampleTypes = ! empty($csvData['link_sample_types']) ? explode(',', $csvData['link_sample_types']) : "file"; - $linkSampleFileNames = !empty($csvData['link_sample_file_names']) ? explode(',', $csvData['link_sample_file_names']) : ""; + $linkSampleFileNames = ! empty($csvData['link_sample_file_names']) ? explode(',', $csvData['link_sample_file_names']) : ""; - $linkDownloads = !empty($csvData['link_downloads']) ? explode(',', $csvData['link_downloads']) : 0; + $linkDownloads = ! empty($csvData['link_downloads']) ? explode(',', $csvData['link_downloads']) : 0; - $linkSortOrders = !empty($csvData['link_sort_orders']) ? explode(',', $csvData['link_sort_orders']) : 0; + $linkSortOrders = ! empty($csvData['link_sort_orders']) ? explode(',', $csvData['link_sort_orders']) : 0; $linkSampleUrlNames = explode(',', $csvData['link_sample_url']); $linkUrlNames = explode(',', $csvData['link_url']); @@ -319,9 +222,8 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['type'] = $csvData['type']; $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData['sku']; - Event::dispatch('catalog.product.create.before'); + $downloadableProduct = $this->productRepository->create($data); - Event::dispatch('catalog.product.create.after', $downloadableProduct); } else { $downloadableProduct = $productData; } @@ -428,6 +330,8 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['downloadable_samples'] = $combinedArray; + $linkSampleFile = null; + //for downloadable links for ($j = 0; $j < count($linkTitles); $j++) { if (trim(strtolower($linkTypes[$j])) == "file") { @@ -445,6 +349,8 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $sampleFileLink = $this->fileOrUrlUpload($dataFlowProfileRecord, $linkSampleTypes[$j], $linkSampleUrlNames[$j], $downloadableProduct->id, $downloadableLinks, $sampleLinkfile = false); } + $linkFileName = null; + if (isset($downloadableLinks['uploadLinkFilesZipName'])) { if (trim(strtolower($linkSampleTypes[$j-1])) == "url") { $linkFileName = $linkFileNames[$j-1]; @@ -540,7 +446,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { $imagePath = storage_path('app/public/imported-products/extracted-images/ admin/'.$dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } @@ -590,9 +496,11 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image return $dataToBeReturn; } - Event::dispatch('catalog.product.update.before', $downloadableProduct->id); - $configDownloadableProduct = $this->productRepository->update($data, $downloadableProduct->id); - Event::dispatch('catalog.product.update.after',$configDownloadableProduct); + Event::dispatch('catalog.product.update.before', $downloadableProduct->id); + + $downloadableProductUpdate = $this->productRepository->update($data, $downloadableProduct->id); + + Event::dispatch('catalog.product.update.after', $downloadableProductUpdate); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $downloadableProduct, $imageZipName); @@ -638,7 +546,7 @@ public function fileOrUrlUpload($dataFlowProfileRecord, $type, $file, $id, $down if ($flag) { $imagePath = storage_path('app/public/imported-products/extracted-images/admin/sample-files/'.$dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } @@ -655,7 +563,7 @@ public function fileOrUrlUpload($dataFlowProfileRecord, $type, $file, $id, $down } else { $imagePath = storage_path('app/public/imported-products/extracted-images/admin/link-sample-files/'.$dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } @@ -701,7 +609,7 @@ public function linkFileOrUrlUpload($dataFlowProfileRecord, $type, $file, $id, $ } else { $imagePath = storage_path('app/public/imported-products/extracted-images/admin/link-files/'.$dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } diff --git a/src/Repositories/Products/GroupedProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/GroupedProductRepository.php similarity index 80% rename from src/Repositories/Products/GroupedProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/GroupedProductRepository.php index 71ed05c..e2ebb0b 100644 --- a/src/Repositories/Products/GroupedProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/GroupedProductRepository.php @@ -2,122 +2,40 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Storage; -use Illuminate\Container\Container as App; +use Illuminate\Support\Facades\{Log, Validator, Event, Storage}; use Webkul\Admin\Imports\DataGridImport; -use Webkul\Category\Repositories\CategoryRepository; use Webkul\Core\Eloquent\Repository; -use Illuminate\Support\Facades\Event; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Illuminate\Support\Facades\Validator; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; -use Illuminate\Support\Facades\Log; -use Webkul\Product\Repositories\ProductCustomerGroupPriceRepository; +use Webkul\Category\Repositories\CategoryRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository}; +use Webkul\Attribute\Repositories\{AttributeOptionRepository, AttributeFamilyRepository}; +use Webkul\Bulkupload\Repositories\{ProductImageRepository, Products\HelperRepository, ImportProductRepository}; class GroupedProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - /** * Create a new repository instance. * - * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @param \Webkul\Product\Repositories\ProductRepository $productRepository + * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository - * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository * @param \Webkul\Bulkupload\Repositories\ProductImageRepository $productImageRepository - * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository + * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository + * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - AttributeOptionRepository $attributeOptionRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->categoryRepository = $categoryRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->helperRepository = $helperRepository; - } + protected CategoryRepository $categoryRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected AttributeOptionRepository $attributeOptionRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected ProductImageRepository $productImageRepository, + protected HelperRepository $helperRepository, + protected ImportProductRepository $importProductRepository, + ) {} /* * Specify Model class name @@ -141,8 +59,7 @@ function model() public function createProduct($requestData, $imageZipName) { try { - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -269,9 +186,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData['sku']; - Event::dispatch('catalog.product.create.before'); $groupedProduct = $this->productRepository->create($data); - Event::dispatch('catalog.product.create.after', $groupedProduct); } else { $groupedProduct = $productData; } @@ -382,7 +297,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { $imagePath = storage_path('app/public/imported-products/extracted-images/admin/'.$dataFlowProfileRecord->id); - if (!file_exists($imagePath)) { + if (! file_exists($imagePath)) { mkdir($imagePath, 0777, true); } @@ -433,8 +348,10 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image } Event::dispatch('catalog.product.update.before', $groupedProduct->id); - $configGroupedProduct = $this->productRepository->update($data, $groupedProduct->id); - Event::dispatch('catalog.product.update.after',$configGroupedProduct); + + $groupedProductUpdate = $this->productRepository->update($data, $groupedProduct->id); + + Event::dispatch('catalog.product.update.after', $groupedProductUpdate); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $groupedProduct, $imageZipName); diff --git a/src/Repositories/Products/HelperRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/HelperRepository.php similarity index 80% rename from src/Repositories/Products/HelperRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/HelperRepository.php index 72cab73..91b4b50 100644 --- a/src/Repositories/Products/HelperRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/HelperRepository.php @@ -2,7 +2,6 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Illuminate\Container\Container as App; use Webkul\Core\Eloquent\Repository; use Illuminate\Support\Facades\Validator; use Webkul\Product\Models\ProductAttributeValue; @@ -14,32 +13,11 @@ class HelperRepository extends Repository { /** - * DataFlowProfileRepository object + * Contains product id * - * @var \Webkul\Bulkupload\Repositories\DataFlowProfileRepository + * @var mixed */ - protected $dataFlowProfileRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * ProductAttributeValueRepository object - * - * @var \Webkul\Product\Repositories\ProductAttributeValueRepository - */ - protected $productAttributeValueRepository; + protected $id; /** * Create a new repository instance. @@ -51,20 +29,11 @@ class HelperRepository extends Repository * @return void */ public function __construct( - DataFlowProfileRepository $dataFlowProfileRepository, - ProductAttributeValueRepository $productAttributeValueRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository - ) - { - $this->dataFlowProfileRepository = $dataFlowProfileRepository; - - $this->productAttributeValueRepository = $productAttributeValueRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - } + protected DataFlowProfileRepository $dataFlowProfileRepository, + protected ProductAttributeValueRepository $productAttributeValueRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository + ) {} /** * Specify Model class name @@ -79,18 +48,15 @@ function model() /** * validation Rules for creating product * - * @param integer $dataFlowProfileId - * @param array $records + * @param integer $dataFlowProfileId + * @param array $records * @param \Webkul\Bulkupload\Contracts\ImportProduct $dataFlowProfileRecord * @param \Webkul\Product\Contracts\Product $product - * @return array + * @return array|void */ public function validateCSV($dataFlowProfileId, $records, $dataFlowProfileRecord, $product) { - $messages = []; - $rules = []; - - $profiler = $this->dataFlowProfileRepository->findOneByField('id', $dataFlowProfileId); + $this->dataFlowProfileRepository->findOneByField('id', $dataFlowProfileId); if ($dataFlowProfileRecord) { foreach($records as $data) { @@ -211,7 +177,6 @@ public function createProductValidation($record, $loopCount) } return null; - } catch(\EXception $e) { - } + } catch(\EXception $e) {} } } diff --git a/src/Repositories/Products/SimpleProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/SimpleProductRepository.php similarity index 79% rename from src/Repositories/Products/SimpleProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/SimpleProductRepository.php index 8a4227f..2cc6109 100644 --- a/src/Repositories/Products/SimpleProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/SimpleProductRepository.php @@ -2,133 +2,43 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Storage; -use Illuminate\Container\Container as App; +use Illuminate\Support\Facades\{Validator,Event, Log, Storage}; use Webkul\Admin\Imports\DataGridImport; -use Illuminate\Support\Facades\Validator; use Webkul\Core\Eloquent\Repository; -use Illuminate\Support\Facades\Event; use Webkul\Category\Repositories\CategoryRepository; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; use Webkul\Inventory\Repositories\InventorySourceRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Product\Repositories\ProductCustomerGroupPriceRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository}; +use Webkul\Attribute\Repositories\{AttributeFamilyRepository, AttributeOptionRepository}; +use Webkul\Bulkupload\Repositories\{Products\HelperRepository, ImportProductRepository, ProductImageRepository}; class SimpleProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - - /** - * InventorySourceRepository object - * - * @var \Webkul\Inventory\Repositories\InventorySourceRepository - */ - protected $inventorySourceRepository; - /** * Create a new repository instance. * - * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository - * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository + * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @param \Webkul\Product\Repositories\ProductRepository $productRepository * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository + * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository + * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * @param \Webkul\Bulkupload\Repositories\ProductImageRepository $productImageRepository - * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository * * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - AttributeOptionRepository $attributeOptionRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - InventorySourceRepository $inventorySourceRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->categoryRepository = $categoryRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->helperRepository = $helperRepository; - - $this->inventorySourceRepository = $inventorySourceRepository; - } + protected CategoryRepository $categoryRepository, + protected InventorySourceRepository $inventorySourceRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected AttributeOptionRepository $attributeOptionRepository, + protected HelperRepository $helperRepository, + protected ImportProductRepository $importProductRepository, + protected ProductImageRepository $productImageRepository, + ) {} /* * Specify Model class name @@ -152,24 +62,20 @@ function model() public function createProduct($requestData, $imageZipName, $product) { try { - $inventory = []; - - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; if ($requestData['totalNumberOfCSVRecord'] < 1000) { - $processCSVRecords = $requestData['totalNumberOfCSVRecord']/($requestData['totalNumberOfCSVRecord']/10); + $processCSVRecords = $requestData['totalNumberOfCSVRecord'] / ($requestData['totalNumberOfCSVRecord']/10); } else { - $processCSVRecords = $requestData['totalNumberOfCSVRecord']/($requestData['totalNumberOfCSVRecord']/100); + $processCSVRecords = $requestData['totalNumberOfCSVRecord'] / ($requestData['totalNumberOfCSVRecord']/100); } $uptoProcessCSVRecords = (int)$requestData['countOfStartedProfiles'] + 10; $processRecords = (int)$requestData['countOfStartedProfiles'] + (int)$requestData['numberOfCSVRecord']; - if ($requestData['numberOfCSVRecord'] > $processCSVRecords) { for ($i = $requestData['countOfStartedProfiles']; $i < $uptoProcessCSVRecords; $i++) { $invalidateProducts = $this->store($csvData[$i], $i, $dataFlowProfileRecord, $requestData, $imageZipName); @@ -210,7 +116,7 @@ public function createProduct($requestData, $imageZipName, $product) return $dataToBeReturn; } catch (\Exception $e) { - Log::error('simple create product log: '. $e->getMessage()); + Log::error('simple create product log: ' . $e->getMessage()); $categoryError = explode('[' ,$e->getMessage()); $categorySlugError = explode(']' ,$e->getMessage()); @@ -223,7 +129,7 @@ public function createProduct($requestData, $imageZipName, $product) $remainDataInCSV = 0; } - if ($categoryError[0] == "No query results for model ") { + if ($categoryError[0] == "No query results for model") { $dataToBeReturn = array( 'remainDataInCSV' => $remainDataInCSV, 'productsUploaded' => $productsUploaded, @@ -283,7 +189,9 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['sku'] = $csvData['sku']; Event::dispatch('catalog.product.create.before'); + $simpleproductData = $this->productRepository->create($data); + Event::dispatch('catalog.product.create.after', $simpleproductData); } else { $simpleproductData = $productData; @@ -300,7 +208,6 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $searchIndex = strtolower($value['code']); if (array_key_exists($searchIndex, $csvData)) { - if (is_null($csvData[$searchIndex])) { continue; } @@ -389,7 +296,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image foreach ($individualProductimages as $imageArraykey => $imageURL) { if (filter_var(trim($imageURL), FILTER_VALIDATE_URL)) { - $imagePath = storage_path('app/public/imported-products/extracted-images/admin/'.$dataFlowProfileRecord->id); + $imagePath = storage_path('app/public/imported-products/extracted-images/admin/' . $dataFlowProfileRecord->id); if (!file_exists($imagePath)) { mkdir($imagePath, 0777, true); @@ -442,8 +349,10 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image } Event::dispatch('catalog.product.update.before', $simpleproductData->id); + $configSimpleProductAttributeStore = $this->productRepository->update($data, $simpleproductData->id); - Event::dispatch('catalog.product.update.after',$configSimpleProductAttributeStore); + + Event::dispatch('catalog.product.update.after', $configSimpleProductAttributeStore); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $simpleproductData, $imageZipName); @@ -451,7 +360,7 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $this->productImageRepository->bulkuploadImages($data, $simpleproductData, $imageZipName = null); } } catch(\Exception $e) { - \Log::error('simple product store function'. $e->getMessage()); + Log::error('simple product store function'. $e->getMessage()); } } } \ No newline at end of file diff --git a/src/Repositories/Products/VirtualProductRepository.php b/packages/Webkul/Bulkupload/src/Repositories/Products/VirtualProductRepository.php similarity index 79% rename from src/Repositories/Products/VirtualProductRepository.php rename to packages/Webkul/Bulkupload/src/Repositories/Products/VirtualProductRepository.php index 50191b2..0d6be4d 100644 --- a/src/Repositories/Products/VirtualProductRepository.php +++ b/packages/Webkul/Bulkupload/src/Repositories/Products/VirtualProductRepository.php @@ -2,134 +2,43 @@ namespace Webkul\Bulkupload\Repositories\Products; -use Storage; -use Illuminate\Container\Container as App; -use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\{Validator, Storage, Log, Event}; use Webkul\Core\Eloquent\Repository; use Webkul\Admin\Imports\DataGridImport; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\Event; use Webkul\Category\Repositories\CategoryRepository; -use Webkul\Bulkupload\Repositories\ImportProductRepository; -use Webkul\Product\Repositories\ProductFlatRepository; use Webkul\Inventory\Repositories\InventorySourceRepository; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Attribute\Repositories\AttributeFamilyRepository; -use Webkul\Bulkupload\Repositories\Products\HelperRepository; -use Webkul\Attribute\Repositories\AttributeOptionRepository; -use Webkul\Bulkupload\Repositories\ProductImageRepository; -use Webkul\Product\Repositories\ProductCustomerGroupPriceRepository; +use Webkul\Product\Repositories\{ProductFlatRepository, ProductRepository}; +use Webkul\Attribute\Repositories\{AttributeFamilyRepository, AttributeOptionRepository}; +use Webkul\Bulkupload\Repositories\{Products\HelperRepository, ImportProductRepository, ProductImageRepository}; class VirtualProductRepository extends Repository { - /** - * ImportProductRepository object - * - * @var \Webkul\Bulkupload\Repositories\ImportProductRepository - */ - protected $importProductRepository; - - /** - * CategoryRepository object - * - * @var \Webkul\Category\Repositories\CategoryRepository - */ - protected $categoryRepository; - - /** - * ProductFlatRepository object - * - * @var \Webkul\Product\Repositories\ProductFlatRepository - */ - protected $productFlatRepository; - - /** - * ProductRepository object - * - * @var \Webkul\Product\Repositories\ProductRepository - */ - protected $productRepository; - - /** - * AttributeFamilyRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository - */ - protected $attributeFamilyRepository; - - /** - * HelperRepository object - * - * @var \Webkul\Bulkupload\Repositories\Products\HelperRepository - */ - protected $helperRepository; - - /** - * ProductImageRepository object - * - * @var \Webkul\Bulkupload\Repositories\ProductImageRepository - */ - protected $productImageRepository; - - /** - * AttributeOptionRepository object - * - * @var \Webkul\Attribute\Repositories\AttributeOptionRepository - */ - protected $attributeOptionRepository; - - /** - * InventorySourceRepository object - * - * @var \Webkul\Inventory\Repositories\InventorySourceRepository - */ - protected $inventorySourceRepository; - /** * Create a new repository instance. * - * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository + * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @param \Webkul\Product\Repositories\ProductRepository $productRepository * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository + * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository * @param \Webkul\Bulkupload\Repositories\Products\HelperRepository $helperRepository + * @param \Webkul\Bulkupload\Repositories\ImportProductRepository $importProductRepository * @param \Webkul\Bulkupload\Repositories\ProductImageRepository $productImageRepository - * @param \Webkul\Attribute\Repositories\AttributeOptionRepository $attributeOptionRepository - * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository * * @return void */ public function __construct( - ImportProductRepository $importProductRepository, - CategoryRepository $categoryRepository, - ProductFlatRepository $productFlatRepository, - ProductRepository $productRepository, - AttributeFamilyRepository $attributeFamilyRepository, - HelperRepository $helperRepository, - ProductImageRepository $productImageRepository, - AttributeOptionRepository $attributeOptionRepository, - InventorySourceRepository $inventorySourceRepository - ) - { - $this->importProductRepository = $importProductRepository; - - $this->categoryRepository = $categoryRepository; - - $this->productFlatRepository = $productFlatRepository; - - $this->productRepository = $productRepository; - - $this->productImageRepository = $productImageRepository; - - $this->attributeFamilyRepository = $attributeFamilyRepository; - - $this->helperRepository = $helperRepository; - - $this->attributeOptionRepository = $attributeOptionRepository; - - $this->inventorySourceRepository = $inventorySourceRepository; - } + protected CategoryRepository $categoryRepository, + protected InventorySourceRepository $inventorySourceRepository, + protected ProductFlatRepository $productFlatRepository, + protected ProductRepository $productRepository, + protected AttributeFamilyRepository $attributeFamilyRepository, + protected AttributeOptionRepository $attributeOptionRepository, + protected HelperRepository $helperRepository, + protected ImportProductRepository $importProductRepository, + protected ProductImageRepository $productImageRepository, + ) {} /* * Specify Model class name @@ -153,9 +62,7 @@ public function createProduct($requestData, $imageZipName) { try { $inventory = []; - - $dataFlowProfileRecord = $this->importProductRepository->findOneByField - ('data_flow_profile_id', $requestData['data_flow_profile_id']); + $dataFlowProfileRecord = $this->importProductRepository->findOneByField('data_flow_profile_id', $requestData['data_flow_profile_id']); $csvData = (new DataGridImport)->toArray($dataFlowProfileRecord->file_path)[0]; @@ -279,10 +186,8 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image $data['type'] = $csvData['type']; $data['attribute_family_id'] = $attributeFamilyData->id; $data['sku'] = $csvData['sku']; - Event::dispatch('catalog.product.create.before'); - $virtualProductData = $this->productRepository->create($data); - Event::dispatch('catalog.product.create.after', $virtualProductData); + $virtualProductData = $this->productRepository->create($data); } else { $virtualProductData = $productData; } @@ -429,9 +334,11 @@ public function store($csvData, $i, $dataFlowProfileRecord, $requestData, $image return $dataToBeReturn; } - Event::dispatch('catalog.product.update.before', $virtualProductData->id); - $configVirtualProduct = $this->productRepository->update($data, $virtualProductData->id); - Event::dispatch('catalog.product.update.after',$configVirtualProduct); + Event::dispatch('catalog.product.update.before', $virtualProductData->id); + + $virutalProduct = $this->productRepository->update($data, $virtualProductData->id); + + Event::dispatch('catalog.product.update.after', $virutalProduct); if (isset($imageZipName)) { $this->productImageRepository->bulkuploadImages($data, $virtualProductData, $imageZipName); diff --git a/packages/Webkul/Bulkupload/src/Requests/AddProfileRequest.php b/packages/Webkul/Bulkupload/src/Requests/AddProfileRequest.php new file mode 100644 index 0000000..edbe338 --- /dev/null +++ b/packages/Webkul/Bulkupload/src/Requests/AddProfileRequest.php @@ -0,0 +1,37 @@ + + */ + public function rules(): array + { + $rules = [ + 'attribute_family_id' => 'required', + 'locale_code' => 'required' + ]; + + if (request()->routeIs('admin.bulk-upload.dataflow.update-profile')){ + $rules['name'] = 'required|unique:bulkupload_data_flow_profiles,name,' . $this->id; + } else { + $rules['name'] = 'required|unique:bulkupload_data_flow_profiles'; + } + + return $rules; + } +} diff --git a/packages/Webkul/Bulkupload/src/Requests/ImportProductRequest.php b/packages/Webkul/Bulkupload/src/Requests/ImportProductRequest.php new file mode 100644 index 0000000..099033f --- /dev/null +++ b/packages/Webkul/Bulkupload/src/Requests/ImportProductRequest.php @@ -0,0 +1,31 @@ + + */ + public function rules(): array + { + return [ + 'attribute_family' => 'required', + 'file_path' => 'required', + 'image_path' => 'mimetypes:application/zip|max:10000', + 'data_flow_profile' => 'required', + ]; + } +} diff --git a/src/Resources/assets/images/Icon-Bulk-Upload-Active.svg b/packages/Webkul/Bulkupload/src/Resources/assets/images/Icon-Bulk-Upload-Active.svg similarity index 100% rename from src/Resources/assets/images/Icon-Bulk-Upload-Active.svg rename to packages/Webkul/Bulkupload/src/Resources/assets/images/Icon-Bulk-Upload-Active.svg diff --git a/src/Resources/assets/images/Icon-Bulk-Upload.svg b/packages/Webkul/Bulkupload/src/Resources/assets/images/Icon-Bulk-Upload.svg similarity index 100% rename from src/Resources/assets/images/Icon-Bulk-Upload.svg rename to packages/Webkul/Bulkupload/src/Resources/assets/images/Icon-Bulk-Upload.svg diff --git a/src/Resources/assets/images/Icon-Crossed.svg b/packages/Webkul/Bulkupload/src/Resources/assets/images/Icon-Crossed.svg similarity index 100% rename from src/Resources/assets/images/Icon-Crossed.svg rename to packages/Webkul/Bulkupload/src/Resources/assets/images/Icon-Crossed.svg diff --git a/src/Resources/assets/images/check-accent.svg b/packages/Webkul/Bulkupload/src/Resources/assets/images/check-accent.svg similarity index 100% rename from src/Resources/assets/images/check-accent.svg rename to packages/Webkul/Bulkupload/src/Resources/assets/images/check-accent.svg diff --git a/src/Resources/assets/images/cross-accent.svg b/packages/Webkul/Bulkupload/src/Resources/assets/images/cross-accent.svg similarity index 100% rename from src/Resources/assets/images/cross-accent.svg rename to packages/Webkul/Bulkupload/src/Resources/assets/images/cross-accent.svg diff --git a/src/Resources/assets/images/finish.svg b/packages/Webkul/Bulkupload/src/Resources/assets/images/finish.svg similarity index 100% rename from src/Resources/assets/images/finish.svg rename to packages/Webkul/Bulkupload/src/Resources/assets/images/finish.svg diff --git a/src/Resources/assets/js/app.js b/packages/Webkul/Bulkupload/src/Resources/assets/js/app.js similarity index 69% rename from src/Resources/assets/js/app.js rename to packages/Webkul/Bulkupload/src/Resources/assets/js/app.js index 205c766..734fb21 100644 --- a/src/Resources/assets/js/app.js +++ b/packages/Webkul/Bulkupload/src/Resources/assets/js/app.js @@ -4,5 +4,3 @@ window.axios = require("axios"); Vue.prototype.$http = axios; window.eventBus = new Vue(); - -Vue.component("demo", require("./components/demo")); diff --git a/src/Resources/assets/sass/admin.scss b/packages/Webkul/Bulkupload/src/Resources/assets/sass/admin.scss similarity index 96% rename from src/Resources/assets/sass/admin.scss rename to packages/Webkul/Bulkupload/src/Resources/assets/sass/admin.scss index fe99fff..96fb983 100644 --- a/src/Resources/assets/sass/admin.scss +++ b/packages/Webkul/Bulkupload/src/Resources/assets/sass/admin.scss @@ -50,6 +50,7 @@ progress { background-image: url("../images/finish.svg"); } } -.ms-15 { - margin-left: 15px; + +.add-prodfile { + padding: 20px 15px; } diff --git a/src/Resources/assets/sass/app.scss b/packages/Webkul/Bulkupload/src/Resources/assets/sass/app.scss similarity index 90% rename from src/Resources/assets/sass/app.scss rename to packages/Webkul/Bulkupload/src/Resources/assets/sass/app.scss index 7d23555..77dc76c 100644 --- a/src/Resources/assets/sass/app.scss +++ b/packages/Webkul/Bulkupload/src/Resources/assets/sass/app.scss @@ -1,3 +1,5 @@ +@import "admin.scss"; + .bulk-upload-icon { width: 48px; height: 48px; @@ -51,6 +53,11 @@ progress { } } -.ms-15 { - margin-left: 15px; - } \ No newline at end of file +.display-flex { + display: flex +} + +.checkbox { + height: 17px; + width: 17px; +} diff --git a/src/Resources/lang/ar/app.php b/packages/Webkul/Bulkupload/src/Resources/lang/ar/app.php similarity index 100% rename from src/Resources/lang/ar/app.php rename to packages/Webkul/Bulkupload/src/Resources/lang/ar/app.php diff --git a/src/Resources/lang/en/app.php b/packages/Webkul/Bulkupload/src/Resources/lang/en/app.php similarity index 88% rename from src/Resources/lang/en/app.php rename to packages/Webkul/Bulkupload/src/Resources/lang/en/app.php index 09ba67a..bc15f94 100644 --- a/src/Resources/lang/en/app.php +++ b/packages/Webkul/Bulkupload/src/Resources/lang/en/app.php @@ -12,7 +12,7 @@ 'bulk-upload' => [ 'index' => 'Bulkupload', 'manage-bulk-upload' => 'Manage Bulk Upload', - + 'bulk-upload-dataflow-profile' => 'Bulk Upload Dataflow Profile', 'data-flow-profile' => [ 'index' => 'Data Flow Profile', 'add-profile' => 'Add Profile', @@ -55,7 +55,9 @@ 'upload-sample-files' => 'Upload Sample Files', 'file' => 'CSV/XLS/XLSX file', 'image' => 'Image Zip file', - 'save' => 'Save' + 'save' => 'Save', + 'select-sample-file' => 'Please select a sample file name', + 'bundle-download-warn' => 'Please make sure that Bundle Product is associated with other products, in bundle_options product_id must be available in products table.', ], 'messages' => [ diff --git a/src/Resources/lang/fa/app.php b/packages/Webkul/Bulkupload/src/Resources/lang/fa/app.php similarity index 100% rename from src/Resources/lang/fa/app.php rename to packages/Webkul/Bulkupload/src/Resources/lang/fa/app.php diff --git a/src/Resources/lang/nl/app.php b/packages/Webkul/Bulkupload/src/Resources/lang/nl/app.php similarity index 100% rename from src/Resources/lang/nl/app.php rename to packages/Webkul/Bulkupload/src/Resources/lang/nl/app.php diff --git a/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Bulkupload/src/Resources/lang/pt_BR/app.php similarity index 100% rename from src/Resources/lang/pt_BR/app.php rename to packages/Webkul/Bulkupload/src/Resources/lang/pt_BR/app.php diff --git a/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/data-flow-profile/edit.blade.php b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/data-flow-profile/edit.blade.php new file mode 100644 index 0000000..cd477a6 --- /dev/null +++ b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/data-flow-profile/edit.blade.php @@ -0,0 +1,76 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('bulkupload::app.admin.bulk-upload.bulk-upload-dataflow-profile') }} +@endsection + +@push('css') + +@endpush + +@section('content') +
+
+ +
+
+

{{ __('bulkupload::app.admin.bulk-upload.data-flow-profile.edit-profile') }}

+
+ +
+ @csrf + input('family') ?> + +
+ + + +
+ +
+ + + + + @if ($familyId) + + @endif + +
+ +
+ + + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+@endsection diff --git a/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/data-flow-profile/index.blade.php b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/data-flow-profile/index.blade.php new file mode 100644 index 0000000..49a0d67 --- /dev/null +++ b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/data-flow-profile/index.blade.php @@ -0,0 +1,80 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('bulkupload::app.admin.bulk-upload.data-flow-profile.index') }} +@stop + +@section('content') + + +
+
+
+ +
+ @csrf + @php($familyId = app('request')->input('family')) + +
+ + + +
+ +
+ + + + + @if ($familyId) + + @endif + + +
+ +
+ + + + @{{ errors.first('locale_code') }} +
+ +
+ +
+
+
+
+
+
+ + + +
+
+ +
+
+
+@stop + diff --git a/src/Resources/views/admin/bulk-upload/layouts/nav-aside.blade.php b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/layouts/nav-aside.blade.php similarity index 100% rename from src/Resources/views/admin/bulk-upload/layouts/nav-aside.blade.php rename to packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/layouts/nav-aside.blade.php diff --git a/src/Resources/views/admin/bulk-upload/run-profile/index.blade.php b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/run-profile/index.blade.php similarity index 84% rename from src/Resources/views/admin/bulk-upload/run-profile/index.blade.php rename to packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/run-profile/index.blade.php index 33929b2..534ef6c 100644 --- a/src/Resources/views/admin/bulk-upload/run-profile/index.blade.php +++ b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/run-profile/index.blade.php @@ -27,16 +27,15 @@
@@ -82,8 +81,7 @@
  • - - + @{{ this.percentCount}}% @@ -126,36 +124,27 @@ computed: { isDisabled () { - if (this.data_flow_profile == '' || this.data_flow_profile == 'Please Select') { + if (this.data_flow_profile == '' || this.data_flow_profile == 'Please Select') return true; - } else { - return false; - } + + return false; } }, methods:{ - detectProfile: function() { - event.target.disabled = true; - }, - runProfiler: function(e) { event.target.disabled = true; - this.detectProfile(); - - const uri = "{{ route('bulk-upload-admin.read-csv') }}" - this.$http.post(uri, { + this.$http.post("{{ route('bulk-upload-admin.read-csv') }}", { data_flow_profile_id: this.data_flow_profile - }) - .then((result) => { + }).then((result) => { totalRecords = result.data; if (typeof(totalRecords) == 'number') { this.product.totalCSVRecords = this.product.remainDataInCSV = totalRecords; } - if(totalRecords > this.product.countOfStartedProfiles) { + if (totalRecords > this.product.countOfStartedProfiles) { this.initiateProfiler(totalRecords); } else { window.flashMessages = [{ @@ -165,24 +154,18 @@ this.$root.addFlashMessages() } - }) - .catch(function (error) { - }); + }).catch(function (error) {}); }, initiateProfiler: function(totalRecords) { - - const url = "{{ route('bulk-upload-admin.run-profile') }}" - - this.$http.post(url, { + this.$http.post("{{ route('bulk-upload-admin.run-profile') }}", { data_flow_profile_id: this.data_flow_profile, numberOfCSVRecord: totalRecords, countOfStartedProfiles: this.product.countOfStartedProfiles, totalNumberOfCSVRecord: this.product.totalCSVRecords, productUploaded: this.product.countOfImportedProduct, errorCount: this.product.countOfError - }) - .then((result) => { + }).then((result) => { this.data = result.data; if (this.data.error) { @@ -202,9 +185,7 @@ this.product.countOfStartedProfiles = this.data.countOfStartedProfiles; this.calculateProgress(result.data); - }) - .catch(function(error) { - }); + }).catch(function(error) {}); }, calculateProgress(result) { diff --git a/src/Resources/views/admin/bulk-upload/style.blade.php b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/style.blade.php similarity index 100% rename from src/Resources/views/admin/bulk-upload/style.blade.php rename to packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/style.blade.php diff --git a/src/Resources/views/admin/bulk-upload/upload-files/index.blade.php b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/upload-files/index.blade.php similarity index 58% rename from src/Resources/views/admin/bulk-upload/upload-files/index.blade.php rename to packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/upload-files/index.blade.php index 5252ba8..a812e44 100644 --- a/src/Resources/views/admin/bulk-upload/upload-files/index.blade.php +++ b/packages/Webkul/Bulkupload/src/Resources/views/admin/bulk-upload/upload-files/index.blade.php @@ -14,28 +14,10 @@