diff --git a/app/Helpers/CustomHelper.php b/app/Helpers/CustomHelper.php index c04403e..f186998 100644 --- a/app/Helpers/CustomHelper.php +++ b/app/Helpers/CustomHelper.php @@ -154,3 +154,20 @@ function slugify($param) { return Str::slug($param); } } + +if (! function_exists('get_unread_announcements')) { + function get_unread_announcements() { + $user = User::findOrFail(Auth::id()); + if($user->role_id === 3){ + $mediaId = $user->company->media->id; + + $media = Media::with('announcements')->findOrFail($mediaId); + return $media->announcements() + ->wherePivot('status', '=', '0') + ->count(); + + }else{ + return 0; + } + } +} diff --git a/app/Http/Controllers/Dashboard/AnnouncementController.php b/app/Http/Controllers/Dashboard/AnnouncementController.php new file mode 100644 index 0000000..3260365 --- /dev/null +++ b/app/Http/Controllers/Dashboard/AnnouncementController.php @@ -0,0 +1,121 @@ + 'Pengumuman' + ]); + }else if(is_role(['3'])){ + return view('dashboard.announcements.media.index', [ + 'title' => 'Pengumuman' + ]); + } + } + + public function create(){ + return view('dashboard.announcements.create', [ + 'title' => 'Tambah Pengumuman', + 'media' => Media::all() + ]); + } + + public function store(AnnouncementRequest $request){ + $validatedData = $request->validated(); + $validatedData['enhancer_id'] = Auth::id(); + + $announcement = Announcement::create($validatedData); + $announcement->media()->attach($validatedData['media_ids']); + + if ($announcement->media()->count() > 0) { + return redirect()->back()->with('success-status', 'Berhasil membuat pengumuman.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal membuat pengumuman'); + } + } + + public function edit($id){ + $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + + return view('dashboard.announcements.edit', [ + 'title' => 'Tambah Pengumuman', + 'announcement' => $announcement, + 'media' => Media::all(), + 'selectedMediaIds' => $announcement->media->pluck('id')->toArray() + ]); + } + + public function update(AnnouncementRequest $request, $id){ + $validatedData = $request->validated(); + $validatedData['enhancer_id'] = Auth::id(); + + $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + + $announcement->update($validatedData); + if ($request->has('media_ids')) { + $mediaData = []; + foreach ($validatedData['media_ids'] as $mediaId) { + $mediaData[$mediaId] = ['status' => '0']; + } + + $announcement->media()->sync($mediaData); + } + + if ($announcement->media()->count() > 0) { + return redirect()->back()->with('success-status', 'Berhasil mengubah pengumuman.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal mengubah pengumuman'); + } + } + + public function show($id){ + $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + + return view('dashboard.announcements.show', [ + 'title' => 'Detail Pengumuman', + 'announcement' => $announcement, + ]); + } + + public function read($id){ + $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + + $mediaId = Auth::user()->company->media->id; + if(!in_array($mediaId, $announcement->media->pluck('id')->toArray())){ + abort(404, "Pengumuman tidak ditemukan."); + } + + $announcement->media()->updateExistingPivot($mediaId, [ + 'status' => '1', + ]); + + return view('dashboard.announcements.read', [ + 'title' => 'Detail Pengumuman', + 'announcement' => $announcement, + ]); + } + + public function destroy($id){ + try { + $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + + $announcement->media()->detach(); + + $announcement->delete(); + + return response()->json(['message' => 'Berhasil menghapus pengumuman.']); + } catch (\Exception $e) { + return response()->json(['message' => 'Gagal menghapus pengumuman.'], 500); + } + } +} diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index 0d6a45f..ce17373 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Controller; use App\Models\AiringProofTheme; +use App\Models\Announcement; use App\Models\Classification; use App\Models\Company; use App\Models\ContentRecap; @@ -399,6 +400,112 @@ public function news(Request $request){ } + public function announcement(Request $request){ + if ($request->ajax()) { + $data = Announcement::whereHas('media', function ($query) { + $query->where('announcements_media.category', 'general'); + })->get(); + + + return DataTables::of($data) + ->addIndexColumn() + ->addColumn('sent_at', function ($data) { + return idn_date($data->created_at, 'l, d F Y'); + }) + ->addColumn('action', function ($data) { + $showUrl = route('dashboard.announcements.show', ['id' => encrypt_id($data->id)]); + + $editUrl = route('dashboard.announcements.edit', ['id' => encrypt_id($data->id)]); + + $deleteUrl = route('dashboard.announcements.destroy', ['id' => encrypt_id($data->id)]); + + $dropdown = '
'; + + return $dropdown; + }) + + ->rawColumns(['action']) + ->make(true); + } + + return response()->json(['error' => 'Unauthorized'], 401); + + } + + public function mediaAnnouncement(Request $request){ + if ($request->ajax()) { + $data = Media::with(['announcements'])->findOrFail(Auth::user()->company->media->id)->announcements; + + + return DataTables::of($data) + ->addIndexColumn() + ->addColumn('sent_at', function ($data) { + return idn_date($data->created_at, 'l, d F Y'); + }) + ->addColumn('sender', function ($data) { + return $data->enhancer->name. ' (admin)'; + }) + ->addColumn('status', function ($data) { + if ($data->pivot->status == '0') { + return 'Belum Dibaca'; + }else{ + return 'Sudah Dibaca'; + } + }) + ->addColumn('action', function ($data) { + $showUrl = route('dashboard.announcements.read', ['id' => encrypt_id($data->id)]); + + $editUrl = route('dashboard.announcements.edit', ['id' => encrypt_id($data->id)]); + + $deleteUrl = route('dashboard.announcements.destroy', ['id' => encrypt_id($data->id)]); + + $dropdown = ''; + + return $dropdown; + }) + + ->rawColumns(['sender', 'status', 'action']) + ->make(true); + } + + return response()->json(['error' => 'Unauthorized'], 401); + + } + public function airingProofTheme(Request $request){ if ($request->ajax()) { @@ -1167,13 +1274,13 @@ public function mediaMonitoring(Request $request){ } }) ->addColumn('action', function ($data) { - $showUrl = route('dashboard.media.monitoring.show', ['id' => encrypt_id($data->id)]); + $showUrl = route('dashboard.media.monitorings.show', ['id' => encrypt_id($data->id)]); $addIssueUrl = route('dashboard.issue.managements.create', ['media_monitoring' => encrypt_id($data->id)]); - $editUrl = route('dashboard.media.monitoring.edit', ['id' => encrypt_id($data->id)]); + $editUrl = route('dashboard.media.monitorings.edit', ['id' => encrypt_id($data->id)]); - $deleteUrl = route('dashboard.media.monitoring.destroy', ['id' => encrypt_id($data->id)]); + $deleteUrl = route('dashboard.media.monitorings.destroy', ['id' => encrypt_id($data->id)]); $dropdown = 'Basic info, like your name and address, that you use on Nio Platform.
+Basic info, like your name and address, that you use on Nio Platform.
+