validated(); DB::beginTransaction(); try { $teams = Teams::create($validate); $users = $request->input('user', []); // loop untuk insert data users ke tabel teams_users foreach ($users as $user) { TeamsUsers::create([ 'teams_id' => $teams->id, 'user_id' => $user ]); } DB::commit(); return redirect() ->route('basicdata.teams.index') ->with('success', 'Data saved successfully. '); } catch (Exception $e) { DB::rollBack(); return redirect() ->route('basicdata.teams.create') ->with('error', 'Failed to save data. '); } } /** * Show the specified resource. */ public function show($id) { return view('lpj::show'); } /** * Show the form for editing the specified resource. */ public function edit($id) { $teams = Teams::find($id); $region = Regions::all(); $user = User::all(); $selectedUsers = $teams->teamsUsers->pluck('user_id')->toArray(); return view('lpj::teams.form', compact('teams', 'region', 'user', 'selectedUsers')); } /** * Update the specified resource in storage. */ public function update(TeamsRequest $request, $id) { $validate = $request->validated(); DB::beginTransaction(); try { $teams = Teams::findOrFail($id); // Update data tim $teams->update($validate); $userIds = $request->input('user', []); $teams->teamsUsers()->delete(); foreach ($userIds as $userId) { TeamsUsers::create([ 'teams_id' => $teams->id, 'user_id' => $userId ]); } DB::commit(); return redirect() ->route('basicdata.teams.index') ->with('success', 'Data updated successfully. '); } catch (Exception $e) { DB::rollBack(); return redirect() ->route('basicdata.teams.create') ->with('error', 'Failed to update data. '); } } /** * Remove the specified resource from storage. */ public function destroy($id) { DB::beginTransaction(); try { $teams = Teams::findOrFail($id); $teams->teamsUsers()->delete(); // Hapus tim $teams->delete(); DB::commit(); return redirect() ->route('basicdata.teams.index') ->with('success', 'Team has been deleted successfully.'); } catch (Exception $e) { DB::rollBack(); return redirect() ->route('basicdata.teams.index') ->with('error', 'Failed to delete team. '); } } public function dataForDatatables(Request $request) { if (is_null($this->user) || !$this->user->can('debitur.view')) { //abort(403, 'Sorry! You are not allowed to view users.'); } $query = Teams::select('teams.id as id', 'teams.name as team_name', 'regions.name as region_name') ->join('regions', 'teams.regions_id', '=', 'regions.id') ->leftJoin('teams_users', 'teams.id', '=', 'teams_users.teams_id') ->leftJoin('users', 'teams_users.user_id', '=', 'users.id') ->addSelect('users.name as user_name'); // search filter if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('teams.name', 'LIKE', "%$search%") ->orWhere('regions.name', 'LIKE', "%$search%") ->orWhere('users.name', 'LIKE', "%$search%"); }); } // sorting if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); $query->orderBy($column, $order); } $totalRecords = $query->count(); $size = $request->get('size'); $pageCount = 1; if ($size > 0) { if ($request->has('page') && $request->has('size')) { $page = $request->get('page'); $offset = ($page - 1) * $size; $query->skip($offset)->take($size); $filteredRecords = $query->count(); $pageCount = ceil($totalRecords / $size); } $data = $query->get(); } else { $filteredRecords = $totalRecords; $data = $query->get(); } $currentPage = $request->get('page') ?? 1; $formattedData = $data->groupBy('id')->map(function ($group) { $team = $group->first(); $team->user_team = $group->map(function ($item) { return [ 'nama' => $item->user_name, // 'role' => $item->role_name, ]; })->toArray(); return $team; })->values(); return response()->json([ 'draw' => $request->get('draw'), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'pageCount' => $pageCount, 'page' => $currentPage, 'totalCount' => $totalRecords, 'data' => $formattedData ]); } }