Skip to content

Commit 85a23d5

Browse files
Implemented product models (#1)
1 parent 4ca0711 commit 85a23d5

File tree

10 files changed

+219
-8
lines changed

10 files changed

+219
-8
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
],
1919
"require": {
2020
"php": "^8.1",
21-
"justbetter/laravel-akeneo-products": "^1.0",
21+
"justbetter/laravel-akeneo-products": "^2.0",
2222
"laravel/nova": "^4.0"
2323
},
2424
"require-dev": {

config/akeneo-products-nova.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
use JustBetter\AkeneoProductsNova\Nova\MappingResource;
4+
use JustBetter\AkeneoProductsNova\Nova\ProductModelResource;
45
use JustBetter\AkeneoProductsNova\Nova\ProductResource;
56

67
return [
@@ -9,6 +10,7 @@
910
'resources' => [
1011
MappingResource::class,
1112
ProductResource::class,
13+
ProductModelResource::class,
1214
],
1315

1416
];

src/Nova/Actions/ResetAction.php renamed to src/Nova/Actions/Product/ResetAction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace JustBetter\AkeneoProductsNova\Nova\Actions;
3+
namespace JustBetter\AkeneoProductsNova\Nova\Actions\Product;
44

55
use Illuminate\Bus\Queueable;
66
use Illuminate\Queue\InteractsWithQueue;

src/Nova/Actions/RetrieveAction.php renamed to src/Nova/Actions/Product/RetrieveAction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace JustBetter\AkeneoProductsNova\Nova\Actions;
3+
namespace JustBetter\AkeneoProductsNova\Nova\Actions\Product;
44

55
use Illuminate\Bus\Queueable;
66
use Illuminate\Queue\InteractsWithQueue;

src/Nova/Actions/UpdateAction.php renamed to src/Nova/Actions/Product/UpdateAction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace JustBetter\AkeneoProductsNova\Nova\Actions;
3+
namespace JustBetter\AkeneoProductsNova\Nova\Actions\Product;
44

55
use Illuminate\Bus\Queueable;
66
use Illuminate\Queue\InteractsWithQueue;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace JustBetter\AkeneoProductsNova\Nova\Actions\ProductModel;
4+
5+
use Illuminate\Bus\Queueable;
6+
use Illuminate\Queue\InteractsWithQueue;
7+
use Illuminate\Queue\SerializesModels;
8+
use Illuminate\Support\Collection;
9+
use JustBetter\AkeneoProducts\Models\ProductModel;
10+
use Laravel\Nova\Actions\Action;
11+
use Laravel\Nova\Actions\ActionResponse;
12+
use Laravel\Nova\Fields\ActionFields;
13+
14+
class ResetAction extends Action
15+
{
16+
use InteractsWithQueue;
17+
use Queueable;
18+
use SerializesModels;
19+
20+
public $name = 'Reset Synchronization Status';
21+
22+
public $confirmText = 'Reset the synchronization status to retrieve the product model and update the data in Akeneo again.';
23+
24+
public $confirmButtonText = 'Reset';
25+
26+
public function handle(ActionFields $fields, Collection $models): ActionResponse
27+
{
28+
$models->each(function (ProductModel $productModel): void {
29+
$productModel->synchronize = true;
30+
$productModel->retrieve = true;
31+
$productModel->update = false;
32+
$productModel->fail_count = 0;
33+
$productModel->failed_at = null;
34+
$productModel->save();
35+
});
36+
37+
return ActionResponse::message(__('Reset!'));
38+
}
39+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace JustBetter\AkeneoProductsNova\Nova\Actions\ProductModel;
4+
5+
use Illuminate\Bus\Queueable;
6+
use Illuminate\Queue\InteractsWithQueue;
7+
use Illuminate\Queue\SerializesModels;
8+
use Illuminate\Support\Collection;
9+
use JustBetter\AkeneoProducts\Models\ProductModel;
10+
use Laravel\Nova\Actions\Action;
11+
use Laravel\Nova\Actions\ActionResponse;
12+
use Laravel\Nova\Fields\ActionFields;
13+
14+
class RetrieveAction extends Action
15+
{
16+
use InteractsWithQueue;
17+
use Queueable;
18+
use SerializesModels;
19+
20+
public $name = 'Retrieve Product Model';
21+
22+
public $confirmText = 'Mark the product model to retrieve its data again.';
23+
24+
public $confirmButtonText = 'Retrieve';
25+
26+
public function handle(ActionFields $fields, Collection $models): ActionResponse
27+
{
28+
$models->each(function (ProductModel $productModel): void {
29+
$productModel->retrieve = true;
30+
$productModel->save();
31+
});
32+
33+
return ActionResponse::message(__('Marked!'));
34+
}
35+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace JustBetter\AkeneoProductsNova\Nova\Actions\ProductModel;
4+
5+
use Illuminate\Bus\Queueable;
6+
use Illuminate\Queue\InteractsWithQueue;
7+
use Illuminate\Queue\SerializesModels;
8+
use Illuminate\Support\Collection;
9+
use JustBetter\AkeneoProducts\Models\ProductModel;
10+
use Laravel\Nova\Actions\Action;
11+
use Laravel\Nova\Actions\ActionResponse;
12+
use Laravel\Nova\Fields\ActionFields;
13+
14+
class UpdateAction extends Action
15+
{
16+
use InteractsWithQueue;
17+
use Queueable;
18+
use SerializesModels;
19+
20+
public $name = 'Update Product Model';
21+
22+
public $confirmText = 'Mark the product model to update the data in Akeneo.';
23+
24+
public $confirmButtonText = 'Update';
25+
26+
public function handle(ActionFields $fields, Collection $models): ActionResponse
27+
{
28+
$models->each(function (ProductModel $productModel): void {
29+
$productModel->retrieve = false;
30+
$productModel->update = true;
31+
$productModel->save();
32+
});
33+
34+
return ActionResponse::message(__('Marked!'));
35+
}
36+
}

src/Nova/ProductModelResource.php

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
namespace JustBetter\AkeneoProductsNova\Nova;
4+
5+
use Illuminate\Http\Request;
6+
use JustBetter\AkeneoProducts\Models\ProductModel;
7+
use Laravel\Nova\Fields\Boolean;
8+
use Laravel\Nova\Fields\Code;
9+
use Laravel\Nova\Fields\DateTime;
10+
use Laravel\Nova\Fields\Text;
11+
use Laravel\Nova\Http\Requests\NovaRequest;
12+
use Laravel\Nova\Resource;
13+
14+
class ProductModelResource extends Resource
15+
{
16+
public static $model = ProductModel::class;
17+
18+
public static $title = 'code';
19+
20+
public static $group = 'Akeneo Products';
21+
22+
public static $search = [
23+
'code',
24+
];
25+
26+
public static function label(): string
27+
{
28+
return __('Product Models');
29+
}
30+
31+
public static function uriKey(): string
32+
{
33+
return 'akeneo-products-product-models';
34+
}
35+
36+
public function fields(NovaRequest $request): array
37+
{
38+
return [
39+
Text::make(__('Code'), 'code')
40+
->sortable(),
41+
42+
Boolean::make(__('Synchronize'), 'synchronize')
43+
->help(__('Determines if the product model should be synchronized.'))
44+
->sortable(),
45+
46+
Boolean::make(__('Retrieve'), 'retrieve')
47+
->help(__('Determines if the product model should be retrieved.'))
48+
->sortable(),
49+
50+
Boolean::make(__('Update'), 'update')
51+
->help(__('Determines if the product model should be updated.'))
52+
->sortable(),
53+
54+
Code::make(__('Data'), 'data')
55+
->json(),
56+
57+
DateTime::make(__('Retrieved At'), 'retrieved_at')
58+
->help(__('Last date the product model has been retrieved.'))
59+
->sortable(),
60+
61+
DateTime::make(__('Updated At'), 'modified_at')
62+
->help(__('Last date the product model has been updated.'))
63+
->sortable(),
64+
];
65+
}
66+
67+
public function filters(NovaRequest $request): array
68+
{
69+
return [
70+
Filters\RetrieveFilter::make(),
71+
Filters\UpdateFilter::make(),
72+
Filters\SynchronizeFilter::make(),
73+
];
74+
}
75+
76+
public function actions(NovaRequest $request): array
77+
{
78+
return [
79+
Actions\ProductModel\RetrieveAction::make(),
80+
Actions\ProductModel\UpdateAction::make(),
81+
Actions\ProductModel\ResetAction::make(),
82+
];
83+
}
84+
85+
public static function authorizedToCreate(Request $request): bool
86+
{
87+
return false;
88+
}
89+
90+
public function authorizedToUpdate(Request $request): bool
91+
{
92+
return false;
93+
}
94+
95+
public function authorizedToReplicate(Request $request): bool
96+
{
97+
return false;
98+
}
99+
}

src/Nova/ProductResource.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ProductResource extends Resource
2525

2626
public static function label(): string
2727
{
28-
return 'Products';
28+
return __('Products');
2929
}
3030

3131
public static function uriKey(): string
@@ -76,9 +76,9 @@ public function filters(NovaRequest $request): array
7676
public function actions(NovaRequest $request): array
7777
{
7878
return [
79-
Actions\RetrieveAction::make(),
80-
Actions\UpdateAction::make(),
81-
Actions\ResetAction::make(),
79+
Actions\Product\RetrieveAction::make(),
80+
Actions\Product\UpdateAction::make(),
81+
Actions\Product\ResetAction::make(),
8282
];
8383
}
8484

0 commit comments

Comments
 (0)