Action::query()->with(['decisions', 'segment'])->withCount('activities')->get(), 'decisions' => Decision::query()->with('actions')->withCount('activities')->get(), 'segments' => Segment::query()->get(), ]); } public function storeAction(Request $request) { $attributes = $request->validate([ 'name' => 'required|string|max:50', 'color_tag' => 'nullable|string|max:25', 'segment_id' => 'nullable|integer|exists:segments,id', 'decisions' => 'nullable|array', 'decisions.*.id' => 'required_with:decisions.*|integer|exists:decisions,id', 'decisions.*.name' => 'required_with:decisions.*|string|max:50', ]); $decisionIds = collect($attributes['decisions'] ?? [])->pluck('id')->toArray(); \DB::transaction(function () use ($attributes, $decisionIds) { /** @var \App\Models\Action $row */ $row = Action::create([ 'name' => $attributes['name'], 'color_tag' => $attributes['color_tag'] ?? null, 'segment_id' => $attributes['segment_id'] ?? null, ]); if (!empty($decisionIds)) { $row->decisions()->sync($decisionIds); } }); return to_route('settings.workflow')->with('success', 'Action created successfully!'); } public function updateAction(int $id, Request $request) { $row = Action::findOrFail($id); $attributes = $request->validate([ 'name' => 'required|string|max:50', 'color_tag' => 'nullable|string|max:25', 'segment_id' => 'nullable|integer|exists:segments,id', 'decisions' => 'nullable|array', 'decisions.*.id' => 'required_with:decisions.*|integer|exists:decisions,id', 'decisions.*.name' => 'required_with:decisions.*|string|max:50' ]); $decisionIds = collect($attributes['decisions'] ?? [])->pluck('id')->toArray(); \DB::transaction(function() use ($attributes, $decisionIds, $row) { $row->update([ 'name' => $attributes['name'], 'color_tag' => $attributes['color_tag'], 'segment_id' => $attributes['segment_id'] ?? null, ]); $row->decisions()->sync($decisionIds); }); return to_route('settings.workflow')->with('success', 'Update successful!'); } public function storeDecision(Request $request) { $attributes = $request->validate([ 'name' => 'required|string|max:50', 'color_tag' => 'nullable|string|max:25', 'actions' => 'nullable|array', 'actions.*.id' => 'required_with:actions.*|integer|exists:actions,id', 'actions.*.name' => 'required_with:actions.*|string|max:50', ]); $actionIds = collect($attributes['actions'] ?? [])->pluck('id')->toArray(); \DB::transaction(function () use ($attributes, $actionIds) { /** @var \App\Models\Decision $row */ $row = Decision::create([ 'name' => $attributes['name'], 'color_tag' => $attributes['color_tag'] ?? null, ]); if (!empty($actionIds)) { $row->actions()->sync($actionIds); } }); return to_route('settings.workflow')->with('success', 'Decision created successfully!'); } public function updateDecision(int $id, Request $request) { $row = Decision::findOrFail($id); $attributes = $request->validate([ 'name' => 'required|string|max:50', 'color_tag' => 'nullable|string|max:25', 'actions' => 'nullable|array', 'actions.*.id' => 'required_with:actions.*|integer|exists:actions,id', 'actions.*.name' => 'required_with:actions.*|string|max:50', ]); $actionIds = collect($attributes['actions'] ?? [])->pluck('id')->toArray(); \DB::transaction(function () use ($attributes, $actionIds, $row) { $row->update([ 'name' => $attributes['name'], 'color_tag' => $attributes['color_tag'] ?? null, ]); $row->actions()->sync($actionIds); }); return to_route('settings.workflow')->with('success', 'Decision updated successfully!'); } public function destroyAction(int $id) { $row = Action::findOrFail($id); if ($row->activities()->exists()) { return back()->with('error', 'Cannot delete action because dependent activities exist.'); } \DB::transaction(function () use ($row) { $row->decisions()->detach(); $row->delete(); }); return back()->with('success', 'Action deleted successfully!'); } public function destroyDecision(int $id) { $row = Decision::findOrFail($id); if ($row->activities()->exists()) { return back()->with('error', 'Cannot delete decision because dependent activities exist.'); } \DB::transaction(function () use ($row) { $row->actions()->detach(); $row->delete(); }); return back()->with('success', 'Decision deleted successfully!'); } }