move into sonardesk
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Workflow\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\View;
|
||||
use Modules\Workflow\Models\WorkflowDefinition;
|
||||
use Modules\Workflow\Models\WorkflowInstance;
|
||||
use Modules\Workflow\Services\WorkflowManager;
|
||||
|
||||
final class WorkflowController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
abort_unless(auth()->user()->can('workflow.view'), 403);
|
||||
|
||||
return view('workflow::admin.index', ['definitions' => WorkflowDefinition::with('stages')->latest()->get(), 'queue' => WorkflowInstance::with(['definition', 'stage', 'subject'])->where('status', 'active')->latest()->paginate(20), 'completed' => WorkflowInstance::where('status', 'completed')->count()]);
|
||||
}
|
||||
|
||||
public function store(Request $request): RedirectResponse
|
||||
{
|
||||
abort_unless($request->user()->can('workflow.manage'), 403);
|
||||
$data = $request->validate(['name' => 'required|string|max:120', 'description' => 'nullable|string', 'subject_type' => 'nullable|string|max:255']);
|
||||
$definition = WorkflowDefinition::create($data + ['slug' => Str::slug($data['name']), 'is_active' => true]);
|
||||
$draft = $definition->stages()->create(['name' => 'Draft', 'slug' => 'draft', 'position' => 0, 'is_initial' => true, 'due_days' => null]);
|
||||
$review = $definition->stages()->create(['name' => 'Review', 'slug' => 'review', 'position' => 10, 'required_permission' => 'workflow.review', 'due_days' => 3]);
|
||||
$published = $definition->stages()->create(['name' => 'Approved', 'slug' => 'approved', 'position' => 20, 'is_terminal' => true, 'allows_rejection' => false]);
|
||||
$definition->transitions()->createMany([['from_stage_id' => $draft->id, 'to_stage_id' => $review->id, 'name' => 'Submit for review', 'action' => 'submit'], ['from_stage_id' => $review->id, 'to_stage_id' => $published->id, 'name' => 'Approve', 'action' => 'approve', 'required_permission' => 'workflow.review'], ['from_stage_id' => $review->id, 'to_stage_id' => $draft->id, 'name' => 'Request changes', 'action' => 'reject', 'required_permission' => 'workflow.review', 'requires_comment' => true]]);
|
||||
|
||||
return back()->with('success', 'Workflow created.');
|
||||
}
|
||||
|
||||
public function transition(Request $request, WorkflowInstance $instance, WorkflowManager $manager): RedirectResponse
|
||||
{
|
||||
abort_unless($request->user()->can('workflow.review'), 403);
|
||||
$data = $request->validate(['action' => 'required|string', 'comment' => 'nullable|string|max:2000']);
|
||||
$manager->transition($instance, $data['action'], $request->user(), $data['comment'] ?? null);
|
||||
|
||||
return back()->with('success', 'Workflow updated.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user