From c246d0e1927990536fbc0d823be61f5aaf5ae3b8 Mon Sep 17 00:00:00 2001 From: Ramon Rietdijk Date: Mon, 15 Jul 2024 14:22:13 +0200 Subject: [PATCH 1/2] Make the Nova integration compatible with laravel-magento-stock ^2.0 --- UPGRADE.md | 13 ++++ composer.json | 36 ++++++++-- config/magento-stock-nova.php | 10 --- phpstan.neon | 11 +++ src/Nova/Actions/Compare.php | 13 ++-- src/Nova/Actions/Process.php | 33 +++++++++ src/Nova/Actions/ResetFailures.php | 17 +++-- src/Nova/Actions/Retrieve.php | 16 ++--- src/Nova/Actions/RetrieveAll.php | 18 +++-- src/Nova/Actions/Retry.php | 15 ++-- src/Nova/Actions/Sync.php | 23 ------ src/Nova/Actions/{Upload.php => Update.php} | 18 ++--- src/Nova/Actions/UpdateAll.php | 58 ++++++++++++++++ src/Nova/Actions/UploadAll.php | 53 -------------- src/Nova/Filters/Status.php | 4 +- src/Nova/Filters/StockStatus.php | 4 +- src/Nova/Filters/Sync.php | 4 +- src/Nova/Metrics/StockErrorsPerDay.php | 10 +-- src/Nova/Metrics/StockRetrievalsPerDay.php | 10 +-- src/Nova/Metrics/StockSyncPartition.php | 7 +- src/Nova/Metrics/StockUpdatesPerDay.php | 10 +-- src/Nova/Metrics/StocksToRetrieve.php | 6 +- src/Nova/Metrics/StocksToUpdate.php | 6 +- src/Nova/{Stock.php => StockResource.php} | 77 +++++++++------------ src/ServiceProvider.php | 33 ++------- 25 files changed, 279 insertions(+), 226 deletions(-) create mode 100644 UPGRADE.md delete mode 100644 config/magento-stock-nova.php create mode 100644 phpstan.neon create mode 100644 src/Nova/Actions/Process.php delete mode 100644 src/Nova/Actions/Sync.php rename src/Nova/Actions/{Upload.php => Update.php} (60%) create mode 100644 src/Nova/Actions/UpdateAll.php delete mode 100644 src/Nova/Actions/UploadAll.php rename src/Nova/{Stock.php => StockResource.php} (70%) diff --git a/UPGRADE.md b/UPGRADE.md new file mode 100644 index 0000000..e5b6678 --- /dev/null +++ b/UPGRADE.md @@ -0,0 +1,13 @@ +# Upgrade guide + +## 4.1.x to 4.2.x + +The 4.2.x release adds support for `justbetter/laravel-magento-stock` version `^2.0`. + +### Refactor + +A few classes like the resource have been renamed. The resource `Stock` is now `StockResource`. Make sure to update all references if you make use of it manually. + +### Configuration file + +The configuration file has been removed. If you wish to customize the fields in the resource, you can create your own resource. diff --git a/composer.json b/composer.json index 61d07a9..a6dcb0b 100644 --- a/composer.json +++ b/composer.json @@ -3,20 +3,43 @@ "description": "Nova integration for justbetter/laravel-magento-stock", "type": "package", "license": "MIT", + "authors": [ + { + "name": "Vincent Boon", + "email": "vincent@justbetter.nl", + "role": "Developer" + }, + { + "name": "Ramon Rietdijk", + "email": "ramon@justbetter.nl", + "role": "Developer" + } + ], "require": { "php": "^8.1", "laravel/nova": "^4.0", - "justbetter/nova-error-logger": "^4.1.0", - "justbetter/laravel-magento-stock": "^1.2.0", + "justbetter/laravel-magento-stock": "dev-feature/refactor", "bolechen/nova-activitylog": "^0.4.0" }, + "require-dev": { + "laravel/pint": "^1.16", + "orchestra/testbench": "^9.1", + "phpunit/phpunit": "^11.2", + "larastan/larastan": "^2.9", + "phpstan/phpstan-mockery": "^1.1" + }, "autoload": { "psr-4": { "JustBetter\\MagentoStockNova\\": "src" } }, - "config": { - "sort-packages": true + "scripts": { + "analyse": "phpstan", + "style": "pint --test", + "quality": [ + "@analyse", + "@style" + ] }, "extra": { "laravel": { @@ -25,8 +48,11 @@ ] } }, + "config": { + "sort-packages": true + }, "minimum-stability": "dev", - "prefer-stable": false, + "prefer-stable": true, "repositories": [ { "type": "composer", diff --git a/config/magento-stock-nova.php b/config/magento-stock-nova.php deleted file mode 100644 index 66aaa6f..0000000 --- a/config/magento-stock-nova.php +++ /dev/null @@ -1,10 +0,0 @@ - [ - 'single_retrieve' => false, - 'retrieve_all' => false, - ], - -]; diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..441cafb --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,11 @@ +includes: + - ./vendor/larastan/larastan/extension.neon + - ./vendor/phpstan/phpstan-mockery/extension.neon + +parameters: + paths: + - src + level: 8 + ignoreErrors: + - identifier: missingType.iterableValue + - identifier: missingType.generics diff --git a/src/Nova/Actions/Compare.php b/src/Nova/Actions/Compare.php index 23ed4ff..d0b52e1 100644 --- a/src/Nova/Actions/Compare.php +++ b/src/Nova/Actions/Compare.php @@ -6,7 +6,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use JustBetter\MagentoStock\Jobs\DispatchComparisonsJob; +use JustBetter\MagentoStock\Jobs\Comparison\DispatchComparisonsJob; use Laravel\Nova\Actions\Action; use Laravel\Nova\Actions\ActionResponse; use Laravel\Nova\Fields\ActionFields; @@ -17,14 +17,17 @@ class Compare extends Action use Queueable; use SerializesModels; - public $name = 'Compare Stock between Nova and Magento'; - - public $standalone = true; + public function __construct() + { + $this + ->withName(__('Compare Stock between Nova and Magento')) + ->standalone(); + } public function handle(ActionFields $fields, Collection $models): ActionResponse { DispatchComparisonsJob::dispatch(); - return ActionResponse::message(__('Starting compare')); + return ActionResponse::message(__('Comparing...')); } } diff --git a/src/Nova/Actions/Process.php b/src/Nova/Actions/Process.php new file mode 100644 index 0000000..e3e424d --- /dev/null +++ b/src/Nova/Actions/Process.php @@ -0,0 +1,33 @@ +withName(__('Process pending stock retrievals and updates')) + ->standalone(); + } + + public function handle(ActionFields $fields, Collection $models): ActionResponse + { + ProcessStocksJob::dispatch(); + + return ActionResponse::message(__('Processing...')); + } +} diff --git a/src/Nova/Actions/ResetFailures.php b/src/Nova/Actions/ResetFailures.php index 30d91c8..72d2bde 100644 --- a/src/Nova/Actions/ResetFailures.php +++ b/src/Nova/Actions/ResetFailures.php @@ -6,27 +6,32 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Actions\Action; use Laravel\Nova\Actions\ActionResponse; use Laravel\Nova\Fields\ActionFields; class ResetFailures extends Action { - use InteractsWithQueue, Queueable, SerializesModels; + use InteractsWithQueue; + use Queueable; + use SerializesModels; - public $name = 'Reset failures'; + public function __construct() + { + $this->withName(__('Reset failures')); + } + /** @param Collection $models */ public function handle(ActionFields $fields, Collection $models): ActionResponse { - /** @var MagentoStock $model */ foreach ($models as $model) { $model->update([ 'fail_count' => 0, - 'sync' => true + 'sync' => true, ]); } - return ActionResponse::message(__('Finished')); + return ActionResponse::message(__('Failures reset!')); } } diff --git a/src/Nova/Actions/Retrieve.php b/src/Nova/Actions/Retrieve.php index d838ded..906268d 100644 --- a/src/Nova/Actions/Retrieve.php +++ b/src/Nova/Actions/Retrieve.php @@ -7,7 +7,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use JustBetter\MagentoStock\Jobs\RetrieveStockJob; +use JustBetter\MagentoStock\Jobs\Retrieval\RetrieveStockJob; use Laravel\Nova\Actions\Action; use Laravel\Nova\Actions\ActionResponse; use Laravel\Nova\Fields\ActionFields; @@ -20,27 +20,27 @@ class Retrieve extends Action implements ShouldQueue use Queueable; use SerializesModels; - public $name = 'Retrieve from source'; - public function __construct() { - $this->onQueue(config('magento-stock.queue')); + $this + ->withName(__('Retrieve from source')) + ->onQueue(config('magento-stock.queue')); } public function handle(ActionFields $fields, Collection $models): ActionResponse { foreach ($models as $model) { - RetrieveStockJob::dispatch($model->sku, $fields->force ?? false); + RetrieveStockJob::dispatch($model->sku, $fields->get('force', false)); } - return ActionResponse::message(__('Retrieving :count stocks', ['count' => $models->count()])); + return ActionResponse::message(__('Retrieving :count stocks...', ['count' => $models->count()])); } public function fields(NovaRequest $request): array { return [ - Boolean::make('Force') - ->help('Forces an update in Magento. Even if the stock hasn\'t changed') + Boolean::make(__('Force'), 'force') + ->help(__('Forces an update in Magento, even if the stock hasn\'t changed.')), ]; } } diff --git a/src/Nova/Actions/RetrieveAll.php b/src/Nova/Actions/RetrieveAll.php index 959c8be..2456d6f 100644 --- a/src/Nova/Actions/RetrieveAll.php +++ b/src/Nova/Actions/RetrieveAll.php @@ -2,22 +2,32 @@ namespace JustBetter\MagentoStockNova\Nova\Actions; +use Illuminate\Bus\Queueable; +use Illuminate\Queue\InteractsWithQueue; +use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use JustBetter\MagentoStock\Jobs\RetrieveAllStockJob; +use JustBetter\MagentoStock\Jobs\Retrieval\RetrieveAllStockJob; use Laravel\Nova\Actions\Action; use Laravel\Nova\Actions\ActionResponse; use Laravel\Nova\Fields\ActionFields; class RetrieveAll extends Action { - public $name = 'Retrieve all from source'; + use InteractsWithQueue; + use Queueable; + use SerializesModels; - public $standalone = true; + public function __construct() + { + $this + ->withName(__('Retrieve all from source')) + ->standalone(); + } public function handle(ActionFields $fields, Collection $models): ActionResponse { RetrieveAllStockJob::dispatch(); - return ActionResponse::message(__('Retrieving')); + return ActionResponse::message(__('Retrieving...')); } } diff --git a/src/Nova/Actions/Retry.php b/src/Nova/Actions/Retry.php index 90ed6e5..ff99a97 100644 --- a/src/Nova/Actions/Retry.php +++ b/src/Nova/Actions/Retry.php @@ -6,21 +6,26 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Actions\Action; use Laravel\Nova\Actions\ActionResponse; use Laravel\Nova\Fields\ActionFields; class Retry extends Action { - use InteractsWithQueue, Queueable, SerializesModels; + use InteractsWithQueue; + use Queueable; + use SerializesModels; - public $name = 'Retry Stock'; + public function __construct() + { + $this->withName(__('Retry stock')); + } public function handle(ActionFields $fields, Collection $models): ActionResponse { - $models->each(fn(MagentoStock $stock) => $stock->update(['sync' => true, 'update' => true, 'fail_count' => 0])); + $models->each(fn (Stock $stock) => $stock->update(['sync' => true, 'update' => true, 'fail_count' => 0])); - return ActionResponse::message(__('Retrying')); + return ActionResponse::message(__('Retrying...')); } } diff --git a/src/Nova/Actions/Sync.php b/src/Nova/Actions/Sync.php deleted file mode 100644 index c020fc6..0000000 --- a/src/Nova/Actions/Sync.php +++ /dev/null @@ -1,23 +0,0 @@ -onQueue(config('magento-stock.queue')); + $this + ->withName(__('Update to Magento')) + ->onQueue(config('magento-stock.queue')); } + /** @param Collection $models */ public function handle(ActionFields $fields, Collection $models): ActionResponse { - /** @var MagentoStock $model */ foreach ($models as $model) { - UpdateStockJob::dispatch($model->sku); + UpdateStockJob::dispatch($model); } - return ActionResponse::message(__('Updating')); + return ActionResponse::message(__('Updating...')); } } diff --git a/src/Nova/Actions/UpdateAll.php b/src/Nova/Actions/UpdateAll.php new file mode 100644 index 0000000..538f2cf --- /dev/null +++ b/src/Nova/Actions/UpdateAll.php @@ -0,0 +1,58 @@ +withName(__('Update all to Magento')) + ->standalone() + ->onQueue(config('magento-stock.queue')); + } + + public function handle(ActionFields $fields, Collection $models): ActionResponse + { + $filter = $fields->get('filter'); + + Stock::query() + ->when($filter === 'in_stock', fn (Builder $query) => $query->where('in_stock', true)) + ->when($filter === 'out_stock', fn (Builder $query) => $query->where('in_stock', false)) + ->get() + ->each(fn (Stock $stock) => UpdateStockJob::dispatch($stock)); + + return ActionResponse::message(__('Updating...')); + } + + public function fields(NovaRequest $request): array + { + return [ + Select::make(__('Filter'), 'filter') + ->rules(['required']) + ->options([ + 'all' => __('All stock'), + 'in_stock' => __('Only all in stock'), + 'out_stock' => __('Only all out of stock'), + ]), + ]; + } +} diff --git a/src/Nova/Actions/UploadAll.php b/src/Nova/Actions/UploadAll.php deleted file mode 100644 index 972cbfe..0000000 --- a/src/Nova/Actions/UploadAll.php +++ /dev/null @@ -1,53 +0,0 @@ -onQueue(config('magento-stock.queue')); - } - - public function handle(ActionFields $fields, Collection $models): ActionResponse - { - MagentoStock::query() - ->when($fields->only_in_stock, fn(Builder $query) => $query->where('in_stock', true)) - ->when($fields->only_out_of_stock, fn(Builder $query) => $query->where('in_stock', false)) - ->get() - ->each(fn(MagentoStock $stock) => UpdateStockJob::dispatch($stock->sku)); - - return ActionResponse::message(__('Updating')); - } - - public function fields(NovaRequest $request): array - { - return [ - Boolean::make(__('Only in stock'), 'only_in_stock'), - Boolean::make(__('Only out of stock'), 'only_out_of_stock'), - ]; - } - -} diff --git a/src/Nova/Filters/Status.php b/src/Nova/Filters/Status.php index 5020350..bd8ca46 100644 --- a/src/Nova/Filters/Status.php +++ b/src/Nova/Filters/Status.php @@ -16,8 +16,8 @@ public function apply(Request $request, $query, $value): Builder public function options(Request $request): array { return [ - 'To retrieve' => 'retrieve', - 'To update' => 'update' + (string) __('To retrieve') => 'retrieve', + (string) __('To update') => 'update', ]; } } diff --git a/src/Nova/Filters/StockStatus.php b/src/Nova/Filters/StockStatus.php index ff005f0..f3d0e0a 100644 --- a/src/Nova/Filters/StockStatus.php +++ b/src/Nova/Filters/StockStatus.php @@ -16,8 +16,8 @@ public function apply(Request $request, $query, $value): Builder public function options(Request $request): array { return [ - 'In Stock' => true, - 'Out of Stock' => false + (string) __('In stock') => true, + (string) __('Out of stock') => false, ]; } } diff --git a/src/Nova/Filters/Sync.php b/src/Nova/Filters/Sync.php index 12234bf..c515586 100644 --- a/src/Nova/Filters/Sync.php +++ b/src/Nova/Filters/Sync.php @@ -16,8 +16,8 @@ public function apply(Request $request, $query, $value): Builder public function options(Request $request): array { return [ - 'Yes' => true, - 'No' => false, + (string) __('Yes') => true, + (string) __('No') => false, ]; } } diff --git a/src/Nova/Metrics/StockErrorsPerDay.php b/src/Nova/Metrics/StockErrorsPerDay.php index 94d3ab3..ec51ab5 100644 --- a/src/Nova/Metrics/StockErrorsPerDay.php +++ b/src/Nova/Metrics/StockErrorsPerDay.php @@ -2,7 +2,7 @@ namespace JustBetter\MagentoStockNova\Nova\Metrics; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Metrics\Trend; use Laravel\Nova\Metrics\TrendResult; @@ -11,15 +11,15 @@ class StockErrorsPerDay extends Trend { public function calculate(NovaRequest $request): TrendResult { - return $this->countByDays($request, MagentoStock::class, 'last_failed'); + return $this->countByDays($request, Stock::class, 'last_failed'); } public function ranges(): array { return [ - 30 => '30 Days', - 60 => '60 Days', - 90 => '90 Days', + 30 => __(':days days', ['days' => 30]), + 60 => __(':days days', ['days' => 60]), + 90 => __(':days days', ['days' => 90]), ]; } diff --git a/src/Nova/Metrics/StockRetrievalsPerDay.php b/src/Nova/Metrics/StockRetrievalsPerDay.php index 53a69df..9b33e3d 100644 --- a/src/Nova/Metrics/StockRetrievalsPerDay.php +++ b/src/Nova/Metrics/StockRetrievalsPerDay.php @@ -2,7 +2,7 @@ namespace JustBetter\MagentoStockNova\Nova\Metrics; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Metrics\Trend; use Laravel\Nova\Metrics\TrendResult; @@ -11,15 +11,15 @@ class StockRetrievalsPerDay extends Trend { public function calculate(NovaRequest $request): TrendResult { - return $this->countByDays($request, MagentoStock::class, 'last_retrieved'); + return $this->countByDays($request, Stock::class, 'last_retrieved'); } public function ranges(): array { return [ - 30 => '30 Days', - 60 => '60 Days', - 90 => '90 Days', + 30 => __(':days days', ['days' => 30]), + 60 => __(':days days', ['days' => 60]), + 90 => __(':days days', ['days' => 90]), ]; } diff --git a/src/Nova/Metrics/StockSyncPartition.php b/src/Nova/Metrics/StockSyncPartition.php index ef32662..cac7a9d 100644 --- a/src/Nova/Metrics/StockSyncPartition.php +++ b/src/Nova/Metrics/StockSyncPartition.php @@ -2,7 +2,7 @@ namespace JustBetter\MagentoStockNova\Nova\Metrics; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Metrics\Partition; use Laravel\Nova\Metrics\PartitionResult; @@ -13,8 +13,9 @@ class StockSyncPartition extends Partition public function calculate(NovaRequest $request): PartitionResult { - return $this->count($request, MagentoStock::class, 'sync') - ->label(fn($sync) => $sync ? 'Yes' : 'No'); + return $this + ->count($request, Stock::class, 'sync') + ->label(fn (mixed $sync): string => $sync ? __('Yes') : __('No')); } public function uriKey(): string diff --git a/src/Nova/Metrics/StockUpdatesPerDay.php b/src/Nova/Metrics/StockUpdatesPerDay.php index a799bf0..7d57cd3 100644 --- a/src/Nova/Metrics/StockUpdatesPerDay.php +++ b/src/Nova/Metrics/StockUpdatesPerDay.php @@ -2,7 +2,7 @@ namespace JustBetter\MagentoStockNova\Nova\Metrics; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Metrics\Trend; use Laravel\Nova\Metrics\TrendResult; @@ -11,15 +11,15 @@ class StockUpdatesPerDay extends Trend { public function calculate(NovaRequest $request): TrendResult { - return $this->countByDays($request, MagentoStock::class, 'last_updated'); + return $this->countByDays($request, Stock::class, 'last_updated'); } public function ranges(): array { return [ - 30 => '30 Days', - 60 => '60 Days', - 90 => '90 Days', + 30 => __(':days days', ['days' => 30]), + 60 => __(':days days', ['days' => 60]), + 90 => __(':days days', ['days' => 90]), ]; } diff --git a/src/Nova/Metrics/StocksToRetrieve.php b/src/Nova/Metrics/StocksToRetrieve.php index ab47a2f..5d59769 100644 --- a/src/Nova/Metrics/StocksToRetrieve.php +++ b/src/Nova/Metrics/StocksToRetrieve.php @@ -2,7 +2,7 @@ namespace JustBetter\MagentoStockNova\Nova\Metrics; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Metrics\Value; use Laravel\Nova\Metrics\ValueResult; @@ -14,7 +14,9 @@ class StocksToRetrieve extends Value public function calculate(NovaRequest $request): ValueResult { return new ValueResult( - MagentoStock::query()->where('retrieve', '=', true)->count() + Stock::query() + ->where('retrieve', '=', true) + ->count() ); } diff --git a/src/Nova/Metrics/StocksToUpdate.php b/src/Nova/Metrics/StocksToUpdate.php index 11cb18d..cb6a472 100644 --- a/src/Nova/Metrics/StocksToUpdate.php +++ b/src/Nova/Metrics/StocksToUpdate.php @@ -2,7 +2,7 @@ namespace JustBetter\MagentoStockNova\Nova\Metrics; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Metrics\Value; use Laravel\Nova\Metrics\ValueResult; @@ -14,7 +14,9 @@ class StocksToUpdate extends Value public function calculate(NovaRequest $request): ValueResult { return new ValueResult( - MagentoStock::query()->where('update', '=', true)->count() + Stock::query() + ->where('update', '=', true) + ->count() ); } diff --git a/src/Nova/Stock.php b/src/Nova/StockResource.php similarity index 70% rename from src/Nova/Stock.php rename to src/Nova/StockResource.php index 7496e18..95c4d6b 100644 --- a/src/Nova/Stock.php +++ b/src/Nova/StockResource.php @@ -4,8 +4,8 @@ use Bolechen\NovaActivitylog\Resources\Activitylog; use Illuminate\Http\Request; -use JustBetter\NovaErrorLogger\Nova\Error; -use JustBetter\MagentoStock\Models\MagentoStock; +use JustBetter\MagentoStock\Models\Stock; +use JustBetter\MagentoStock\Repositories\BaseRepository; use Laravel\Nova\Fields\Boolean; use Laravel\Nova\Fields\DateTime; use Laravel\Nova\Fields\KeyValue; @@ -15,27 +15,31 @@ use Laravel\Nova\Http\Requests\NovaRequest; use Laravel\Nova\Resource; -class Stock extends Resource +class StockResource extends Resource { - public static $model = MagentoStock::class; + public static string $model = Stock::class; public static $title = 'sku'; public static $group = 'stock'; public static $search = [ - 'sku' + 'sku', ]; public static function label(): string { - return 'Stock'; + return __('Stock'); } public function fields(NovaRequest $request): array { - $fields = [ + $repository = BaseRepository::resolve(); + + /** @var Stock $model */ + $model = $this->model(); + $fields = [ Boolean::make(__('Keep in sync'), 'sync') ->help(__('Disable if this product stock should not be synced')) ->sortable(), @@ -45,17 +49,16 @@ public function fields(NovaRequest $request): array ->sortable(), ]; - if (config('magento-stock.msi')) { - $fields[] = Text::make('MSI', function () { + if ($repository->msi()) { + $fields[] = Text::make(__('MSI'), function () use ($model) { $output = ''; - $msiStatusses = $this->model()->msi_status; - - foreach ($this->model()->msi_stock ?? [] as $source => $qty) { + $msiStatusses = $model->msi_status; + foreach ($model->msi_stock ?? [] as $source => $qty) { $status = ($msiStatusses[$source] ?? false) - ? 'In Stock' - : 'Out of Stock'; + ? __('In Stock') + : __('Out of Stock'); $output .= "$source: $status - $qty
"; } @@ -81,14 +84,11 @@ public function fields(NovaRequest $request): array ->readonly() ->sortable(); - if (!config('magento-stock-nova.hide.single_retrieve')) { - $fields[] = Boolean::make(__('Retrieve'), 'retrieve') - ->help(__('Automatically set to true if this product should be retrieved')) - ->sortable(); - } + $fields[] = Boolean::make(__('Retrieve'), 'retrieve') + ->help(__('Automatically set to true if this product should be retrieved')) + ->sortable(); return array_merge($fields, [ - Boolean::make(__('Update'), 'update') ->help(__('Automatically set to true if this product should be updated in Magento')) ->sortable(), @@ -103,7 +103,7 @@ public function fields(NovaRequest $request): array DateTime::make(__('Last failed'), 'last_failed') ->readonly() - ->help('Max allowed failures: '.config('magento-stock.fails.count')) + ->help(__('Max allowed failures: :limit', ['limit' => $repository->failLimit()])) ->sortable(), Number::make(__('Fail count'), 'fail_count') @@ -111,38 +111,24 @@ public function fields(NovaRequest $request): array ->onlyOnDetail(), MorphMany::make(__('Activity'), 'activities', Activitylog::class), - - MorphMany::make(__('Errors'), 'errors', Error::class), ]); } - public static function authorizedToCreate(Request $request): bool - { - return false; - } - public function actions(NovaRequest $request): array { - $actions = [ - Actions\Upload::make(), - Actions\UploadAll::make(), + return [ + Actions\Retrieve::make(), + Actions\RetrieveAll::make(), + + Actions\Update::make(), + Actions\UpdateAll::make(), Actions\ResetFailures::make(), - Actions\Sync::make(), + Actions\Process::make(), Actions\Retry::make(), - Actions\Compare::make() + Actions\Compare::make(), ]; - - if (!config('magento-stock-nova.hide.single_retrieve')) { - $actions[] = Actions\Retrieve::make(); - } - - if (!config('magento-stock-nova.hide.retrieve_all')) { - $actions[] = Actions\RetrieveAll::make(); - } - - return $actions; } public function filters(NovaRequest $request): array @@ -165,4 +151,9 @@ public function cards(NovaRequest $request): array Metrics\StockErrorsPerDay::make(), ]; } + + public static function authorizedToCreate(Request $request): bool + { + return false; + } } diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index efe9765..e7e27fe 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -3,38 +3,17 @@ namespace JustBetter\MagentoStockNova; use Illuminate\Support\ServiceProvider as BaseServiceProvider; -use JustBetter\MagentoStockNova\Nova\Stock; +use JustBetter\MagentoStockNova\Nova\StockResource; use Laravel\Nova\Nova; class ServiceProvider extends BaseServiceProvider { - public function register(): void - { - $this->mergeConfigFrom(__DIR__ . '/../config/magento-stock-nova.php', 'magento-stock-nova'); - } - public function boot(): void { - $this - ->bootConfig() - ->bootNova(); - } - - protected function bootNova(): static - { - Nova::resources([ - Stock::class, - ]); - - return $this; - } - - protected function bootConfig(): static - { - $this->publishes([ - __DIR__ . '/../config/magento-stock-nova.php' => config_path('magento-stock-nova.php'), - ], 'config'); - - return $this; + Nova::serving(function (): void { + Nova::resources([ + StockResource::class, + ]); + }); } } From dc06ad588a78a49cc4ca04200f2ba33b0e577b8d Mon Sep 17 00:00:00 2001 From: Vincent Boon Date: Wed, 24 Jul 2024 08:58:06 +0200 Subject: [PATCH 2/2] Update composer --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index a6dcb0b..7e946fa 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "require": { "php": "^8.1", "laravel/nova": "^4.0", - "justbetter/laravel-magento-stock": "dev-feature/refactor", + "justbetter/laravel-magento-stock": "^2.0", "bolechen/nova-activitylog": "^0.4.0" }, "require-dev": {