Skip to content

Commit 454198e

Browse files
committed
CheckPromiseAbilityToBePrintedAction & ConvertPromiseToJobAction
1 parent b688c3a commit 454198e

File tree

7 files changed

+108
-54
lines changed

7 files changed

+108
-54
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace App\Actions\Promises;
4+
5+
use App\Models\Enums\PrintJobPromiseStatusEnum;
6+
use App\Models\PrintJobPromise;
7+
8+
class CheckPromiseAbilityToBePrintedAction
9+
{
10+
public function handle(PrintJobPromise $promise, bool $ready = false): bool
11+
{
12+
if (! in_array($promise->status, $ready ? [
13+
PrintJobPromiseStatusEnum::Ready,
14+
] : [
15+
PrintJobPromiseStatusEnum::Ready, PrintJobPromiseStatusEnum::New,
16+
])) {
17+
return false;
18+
}
19+
20+
if (! $promise->content && ! $promise->content_file) {
21+
return false;
22+
}
23+
24+
return (bool) $promise->printer_id;
25+
}
26+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace App\Actions\Promises;
4+
5+
use App\Models\Enums\PrintJobPromiseStatusEnum;
6+
use App\Models\PrintJob;
7+
use App\Models\PrintJobPromise;
8+
9+
class ConvertPromiseToJobAction
10+
{
11+
public function __construct(
12+
protected CheckPromiseAbilityToBePrintedAction $checkPromiseAbilityToBePrintedAction,
13+
) {
14+
}
15+
16+
public function handle(PrintJobPromise $promise): ?PrintJob
17+
{
18+
if (! $this->checkPromiseAbilityToBePrintedAction->handle($promise)) {
19+
return null;
20+
}
21+
22+
$job = new PrintJob();
23+
$job->client_application_id = $promise->client_application_id;
24+
$job->printer_id = $promise->printer_id;
25+
$job->name = $promise->name;
26+
$job->ppd = $promise->type == 'ppd';
27+
$job->ppd_options = $promise->ppd_options;
28+
$job->content = $promise->content;
29+
$job->content_file = $promise->content_file;
30+
$job->file_name = $promise->file_name;
31+
$job->size = $promise->size;
32+
$job->save();
33+
34+
$promise->print_job_id = $job->id;
35+
$promise->status = PrintJobPromiseStatusEnum::SentToPrinter;
36+
$promise->save();
37+
38+
return $job;
39+
}
40+
}

app/Http/Controllers/WebPrintApi/PrintJobPromisesContentController.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace App\Http\Controllers\WebPrintApi;
44

5+
use App\Actions\Promises\CheckPromiseAbilityToBePrintedAction;
6+
use App\Actions\Promises\ConvertPromiseToJobAction;
57
use App\Actions\Promises\SetPromiseContentAction;
68
use App\Http\Controllers\Controller;
79
use App\Models\ClientApplication;
@@ -61,8 +63,13 @@ public function index(PrintJobPromise $promise)
6163
*
6264
* @throws \Illuminate\Auth\Access\AuthorizationException
6365
*/
64-
public function store(Request $request, PrintJobPromise $promise, SetPromiseContentAction $setPromiseContentAction)
65-
{
66+
public function store(
67+
Request $request,
68+
PrintJobPromise $promise,
69+
SetPromiseContentAction $setPromiseContentAction,
70+
ConvertPromiseToJobAction $convertPromiseToJobAction,
71+
CheckPromiseAbilityToBePrintedAction $checkPromiseAbilityToBePrintedAction
72+
) {
6673
$this->authorize('update', $promise);
6774

6875
if ($request->hasFile('content')) {
@@ -90,8 +97,8 @@ public function store(Request $request, PrintJobPromise $promise, SetPromiseCont
9097

9198
$promise->save();
9299

93-
if ($promise->isReadyToPrint()) {
94-
$promise->sendForPrinting();
100+
if ($checkPromiseAbilityToBePrintedAction->handle($promise, true)) {
101+
$convertPromiseToJobAction->handle($promise);
95102
}
96103

97104
return response()->noContent();

app/Http/Controllers/WebPrintApi/PrintJobPromisesController.php

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace App\Http\Controllers\WebPrintApi;
44

55
use App\Actions\Promises\CancelPromiseAction;
6+
use App\Actions\Promises\CheckPromiseAbilityToBePrintedAction;
7+
use App\Actions\Promises\ConvertPromiseToJobAction;
68
use App\Actions\Promises\SetPromiseContentAction;
79
use App\Http\Controllers\Controller;
810
use App\Http\Resources\PrintJobPromiseResource;
@@ -56,8 +58,12 @@ public function index(Request $request)
5658
*
5759
* @return PrintJobPromiseResource|\Illuminate\Http\Response
5860
*/
59-
public function store(Request $request, SetPromiseContentAction $setPromiseContentAction): PrintJobPromiseResource
60-
{
61+
public function store(
62+
Request $request,
63+
SetPromiseContentAction $setPromiseContentAction,
64+
ConvertPromiseToJobAction $convertPromiseToJobAction,
65+
CheckPromiseAbilityToBePrintedAction $checkPromiseAbilityToBePrintedAction
66+
): PrintJobPromiseResource {
6167
/** @var ClientApplication $client_application */
6268
$client_application = $request->user();
6369

@@ -123,8 +129,8 @@ public function store(Request $request, SetPromiseContentAction $setPromiseConte
123129
$promise->save();
124130
}
125131

126-
if ($promise->isReadyToPrint()) {
127-
$promise->sendForPrinting();
132+
if ($checkPromiseAbilityToBePrintedAction->handle($promise, true)) {
133+
$convertPromiseToJobAction->handle($promise);
128134
}
129135

130136
$promise->load(['AvailablePrinters', 'Printer', 'PrintJob']);
@@ -149,8 +155,12 @@ public function show(PrintJobPromise $promise): PrintJobPromiseResource
149155
*
150156
* @return \Illuminate\Http\Response
151157
*/
152-
public function update(Request $request, PrintJobPromise $promise)
153-
{
158+
public function update(
159+
Request $request,
160+
PrintJobPromise $promise,
161+
ConvertPromiseToJobAction $convertPromiseToJobAction,
162+
CheckPromiseAbilityToBePrintedAction $checkPromiseAbilityToBePrintedAction
163+
) {
154164
$available_printers = $promise->AvailablePrinters()->pluck('ulid');
155165
$validated = $request->validate([
156166
'status' => ['nullable', 'in:ready'],
@@ -170,8 +180,8 @@ public function update(Request $request, PrintJobPromise $promise)
170180

171181
$promise->save();
172182

173-
if ($promise->isReadyToPrint()) {
174-
$promise->sendForPrinting();
183+
if ($checkPromiseAbilityToBePrintedAction->handle($promise, true)) {
184+
$convertPromiseToJobAction->handle($promise);
175185
}
176186

177187
return response()->noContent();

app/Http/Controllers/WebPrintApi/PrintJobsController.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace App\Http\Controllers\WebPrintApi;
44

5+
use App\Actions\Promises\CheckPromiseAbilityToBePrintedAction;
6+
use App\Actions\Promises\ConvertPromiseToJobAction;
57
use App\Http\Controllers\Controller;
68
use App\Models\ClientApplication;
79
use App\Models\Enums\PrintJobPromiseStatusEnum;
@@ -44,7 +46,10 @@ public function index(): void
4446
*
4547
* @return \Illuminate\Http\Response
4648
*/
47-
public function store(Request $request)
49+
public function store(
50+
Request $request,
51+
CheckPromiseAbilityToBePrintedAction $checkPromiseAbilityToBePrintedAction,
52+
ConvertPromiseToJobAction $convertPromiseToJobAction)
4853
{
4954
$validated = $request->validate([
5055
'promise' => ['required', Rule::exists('print_job_promises', 'ulid')
@@ -53,13 +58,13 @@ public function store(Request $request)
5358

5459
$promise = PrintJobPromise::where('ulid', $validated['promise'])->firstOrFail();
5560

56-
abort_unless($promise->isPossibleToPrint(), 412);
61+
abort_unless($checkPromiseAbilityToBePrintedAction->handle($promise), 412);
5762
if ($promise->status != PrintJobPromiseStatusEnum::Ready) {
5863
$promise->status = PrintJobPromiseStatusEnum::Ready;
5964
$promise->save();
6065
}
6166

62-
$promise->sendForPrinting();
67+
$convertPromiseToJobAction->handle($promise);
6368

6469
return response()->noContent();
6570
}

app/Http/Livewire/PrintDialog.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
namespace App\Http\Livewire;
44

5+
use App\Actions\Promises\CheckPromiseAbilityToBePrintedAction;
6+
use App\Actions\Promises\ConvertPromiseToJobAction;
57
use App\Models\Enums\PrintDialogStatusEnum;
68
use App\Models\Enums\PrintJobPromiseStatusEnum;
79
use App\Models\PrintDialog as PrintDialogModel;
810
use App\Models\Printer;
11+
use Illuminate\Support\Facades\App;
912
use Illuminate\Support\Str;
1013
use League\Uri\Uri;
1114
use Livewire\Component;
@@ -126,8 +129,8 @@ public function sendToPrint()
126129
if ($this->dialog->auto_print) {
127130
$promise->status = 'ready';
128131
$promise->save();
129-
if ($promise->isPossibleToPrint()) {
130-
$promise->sendForPrinting();
132+
if (App::get(CheckPromiseAbilityToBePrintedAction::class)->handle($promise)) {
133+
App::get(ConvertPromiseToJobAction::class)->handle($promise);
131134
}
132135
}
133136

app/Models/PrintJobPromise.php

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -47,41 +47,4 @@ public function AvailablePrinters(): BelongsToMany
4747
{
4848
return $this->belongsToMany(Printer::class, 'pivot_print_job_printer');
4949
}
50-
51-
public function isReadyToPrint(): bool
52-
{
53-
return $this->status == PrintJobPromiseStatusEnum::Ready && $this->isPossibleToPrint();
54-
}
55-
56-
public function isPossibleToPrint(): bool
57-
{
58-
return in_array($this->status, [
59-
PrintJobPromiseStatusEnum::Ready, PrintJobPromiseStatusEnum::New,
60-
]) && ($this->content || $this->content_file) && $this->printer_id;
61-
}
62-
63-
public function sendForPrinting(): ?PrintJob
64-
{
65-
if (! $this->isReadyToPrint()) {
66-
return null;
67-
}
68-
69-
$job = new PrintJob();
70-
$job->client_application_id = $this->client_application_id;
71-
$job->printer_id = $this->printer_id;
72-
$job->name = $this->name;
73-
$job->ppd = $this->type == 'ppd';
74-
$job->ppd_options = $this->ppd_options;
75-
$job->content = $this->content;
76-
$job->content_file = $this->content_file;
77-
$job->file_name = $this->file_name;
78-
$job->size = $this->size;
79-
$job->save();
80-
81-
$this->print_job_id = $job->id;
82-
$this->status = PrintJobPromiseStatusEnum::SentToPrinter;
83-
$this->save();
84-
85-
return $job;
86-
}
8750
}

0 commit comments

Comments
 (0)