diff --git a/app/Helpers/CustomHelper.php b/app/Helpers/CustomHelper.php index d69995f..a624799 100644 --- a/app/Helpers/CustomHelper.php +++ b/app/Helpers/CustomHelper.php @@ -166,10 +166,10 @@ function slugify($param) { function get_unread_announcements() { $user = User::findOrFail(Auth::id()); if($user->role_id === 3){ - $mediaId = $user->company->media->id; + $userId = $user->id; - $media = Media::with('announcements')->findOrFail($mediaId); - return $media->announcements() + $user = User::with('announcements')->findOrFail($userId); + return $user->announcements() ->wherePivot('status', '=', '0') ->count(); diff --git a/app/Http/Controllers/Dashboard/AnnouncementController.php b/app/Http/Controllers/Dashboard/AnnouncementController.php index 3260365..e2107b0 100644 --- a/app/Http/Controllers/Dashboard/AnnouncementController.php +++ b/app/Http/Controllers/Dashboard/AnnouncementController.php @@ -6,27 +6,30 @@ use App\Http\Requests\AnnouncementRequest; use App\Models\Announcement; use App\Models\Media; +use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AnnouncementController extends Controller { - public function index(){ + public function index(Request $request){ + + $category = $request->input('category', 'general'); + $data = [ + 'title' => 'Pengumuman', + 'category' => $category + ]; if(is_role(['1'])){ - return view('dashboard.announcements.index', [ - 'title' => 'Pengumuman' - ]); + return view('dashboard.announcements.index', $data); }else if(is_role(['3'])){ - return view('dashboard.announcements.media.index', [ - 'title' => 'Pengumuman' - ]); + return view('dashboard.announcements.media.index', $data); } } public function create(){ return view('dashboard.announcements.create', [ 'title' => 'Tambah Pengumuman', - 'media' => Media::all() + 'users' => User::all() ]); } @@ -34,24 +37,28 @@ public function store(AnnouncementRequest $request){ $validatedData = $request->validated(); $validatedData['enhancer_id'] = Auth::id(); - $announcement = Announcement::create($validatedData); - $announcement->media()->attach($validatedData['media_ids']); + if($request->hasFile('attachment')){ + $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/announcements', 'public')['randomFileName']; + } - if ($announcement->media()->count() > 0) { - return redirect()->back()->with('success-status', 'Berhasil membuat pengumuman.'); + $announcement = Announcement::create($validatedData); + $announcement->users()->attach($validatedData['user_ids']); + + if ($announcement->users()->count() > 0) { + return redirect()->route('dashboard.announcements.index')->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)); + $announcement = Announcement::with(['users'])->findOrFail(decrypt_id($id)); return view('dashboard.announcements.edit', [ 'title' => 'Tambah Pengumuman', 'announcement' => $announcement, - 'media' => Media::all(), - 'selectedMediaIds' => $announcement->media->pluck('id')->toArray() + 'users' => User::all(), + 'selectedUsersIds' => $announcement->users->pluck('id')->toArray() ]); } @@ -59,19 +66,26 @@ public function update(AnnouncementRequest $request, $id){ $validatedData = $request->validated(); $validatedData['enhancer_id'] = Auth::id(); - $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + $announcement = Announcement::with(['users'])->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($request->hasFile('attachment')){ + $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/announcements', 'public')['randomFileName']; + delete_file('app/public/uploads/announcements/'.$announcement->attachment); + }else{ + $validatedData['attachment'] = $announcement->attachment; } - if ($announcement->media()->count() > 0) { + $announcement->update($validatedData); + if ($request->has('user_ids')) { + $mediaData = []; + foreach ($validatedData['user_ids'] as $userId) { + $mediaData[$userId] = ['status' => '0']; + } + + $announcement->users()->sync($mediaData); + } + + if ($announcement->users()->count() > 0) { return redirect()->back()->with('success-status', 'Berhasil mengubah pengumuman.'); } else { return redirect()->back()->with('failed-status', 'Gagal mengubah pengumuman'); @@ -79,7 +93,9 @@ public function update(AnnouncementRequest $request, $id){ } public function show($id){ - $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + $announcement = Announcement::with(['users' => function($query) { + $query->withPivot('category'); + }])->findOrFail(decrypt_id($id)); return view('dashboard.announcements.show', [ 'title' => 'Detail Pengumuman', @@ -88,14 +104,14 @@ public function show($id){ } public function read($id){ - $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + $announcement = Announcement::with(['users'])->findOrFail(decrypt_id($id)); - $mediaId = Auth::user()->company->media->id; - if(!in_array($mediaId, $announcement->media->pluck('id')->toArray())){ + $userid = Auth::user()->id; + if(!in_array($userid, $announcement->users->pluck('id')->toArray())){ abort(404, "Pengumuman tidak ditemukan."); } - $announcement->media()->updateExistingPivot($mediaId, [ + $announcement->users()->updateExistingPivot($userid, [ 'status' => '1', ]); @@ -107,9 +123,9 @@ public function read($id){ public function destroy($id){ try { - $announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id)); + $announcement = Announcement::with(['users'])->findOrFail(decrypt_id($id)); - $announcement->media()->detach(); + $announcement->users()->detach(); $announcement->delete(); diff --git a/app/Http/Controllers/Dashboard/CooperationCompletionController.php b/app/Http/Controllers/Dashboard/CooperationCompletionController.php index cee017e..97d1747 100644 --- a/app/Http/Controllers/Dashboard/CooperationCompletionController.php +++ b/app/Http/Controllers/Dashboard/CooperationCompletionController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\CooperationCompletionRequest; +use App\Models\Announcement; use App\Models\Cooperation; use App\Models\CooperationCompletion; use Illuminate\Http\Request; @@ -48,6 +49,16 @@ public function accept($id){ 'status' => '1' ]); + // Announcements + $announcementData = [ + 'headline' => 'Formulir penyelesaian kerjasama '. $completion->order->cooperation->name .' telah disetujui', + 'content' => '
Admin telah menyetujui laporan formulir penyelesaian kerjasama Anda.
', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($completion->media->company->user->id, ['category' => 'system']); + // End Announcements + if ($acceptedCompletion) { return redirect()->back()->with('success-status', 'Berhasil menyetujui penyelesaian kerjasama.'); } else { @@ -81,6 +92,16 @@ public function rejectAction(Request $request, $mediaOrderId, $id){ 'rejection_reason' => $validatedData['rejection_reason'] ]); + // Announcements + $announcementData = [ + 'headline' => 'Formulir penyelesaian kerjasama '. $completion->order->cooperation->name .' telah ditolak', + 'content' => 'Admin telah menolak laporan formulir penyelesaian kerjasama Anda.
', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($completion->media->company->user->id, ['category' => 'system']); + // End Announcements + if ($rejectedCompletion) { return redirect()->back()->with('success-status', 'Berhasil menolak penyelesaian kerjasama.'); } else { diff --git a/app/Http/Controllers/Dashboard/CooperationRequestController.php b/app/Http/Controllers/Dashboard/CooperationRequestController.php index e2a1a81..f794c7c 100644 --- a/app/Http/Controllers/Dashboard/CooperationRequestController.php +++ b/app/Http/Controllers/Dashboard/CooperationRequestController.php @@ -4,8 +4,10 @@ use App\Http\Controllers\Controller; use App\Http\Requests\JournalistCooperationProposalRequest; +use App\Models\Announcement; use App\Models\Cooperation; use App\Models\CooperationProposal; +use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -62,15 +64,27 @@ public function accept(Request $request, $id){ return abort(404, 'Media not found for the cooperation.'); } - - // dd($mediaCooperation->pivot); - // Pastikan data yang ingin diperbarui ada dan statusnya belum '3' if ($mediaCooperation->pivot->status == '0') { $affectedRows = $cooperation->media()->updateExistingPivot($mediaCooperation->id, [ 'status' => '1', ]); + // Announcements + $announcementData = [ + 'headline' => 'Ajuan Kerjasama '.$cooperation->name.' diterima oleh media '.$mediaCooperation->name. '', + 'content' => 'Ajuan Kerjasama '.$cooperation->name.' telah diterima oleh media '.$mediaCooperation->name.'
', + 'enhancer_id' => Auth::id() + ]; + + $adminIds = User::where('role_id', 1)->pluck('id')->mapWithKeys(function ($id) { + return [$id => ['category' => 'system']]; + })->toArray(); + + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($adminIds); + // End Announcements + if ($affectedRows > 0) { return redirect()->back()->with('success-status', 'Berhasil menerima kerjasama.'); } else { @@ -99,6 +113,8 @@ public function createProposal($id){ public function storeProposal(JournalistCooperationProposalRequest $request, $id){ $validatedData = $request->validated(); + + $cooperation = Cooperation::findOrFail(decrypt_id($id)); $validatedData['cooperation_id'] = decrypt_id($id); $validatedData['media_id'] = Auth::user()->company->media->id; $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/cooperation-proposals', 'public')['randomFileName']; @@ -106,6 +122,21 @@ public function storeProposal(JournalistCooperationProposalRequest $request, $id $createdCooperationProposal = CooperationProposal::create($validatedData); $createdCooperationProposal->journalists()->attach($validatedData['journalist_ids']); + // Announcements + $announcementData = [ + 'headline' => 'Media '.Auth::user()->company->media->name.' telah mengirimkan formulir pengajuan kerjasama '.$cooperation->name. '', + 'content' => 'Media '.Auth::user()->company->media->name.' telah mengirimkan formulir pengajuan kerjasama '.$cooperation->name. ' pada '.idn_date($createdCooperationProposal->created_at, 'l, d F Y H:i').'', + 'enhancer_id' => Auth::id() + ]; + + $adminIds = User::where('role_id', 1)->pluck('id')->mapWithKeys(function ($id) { + return [$id => ['category' => 'system']]; + })->toArray(); + + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($adminIds); + // End Announcements + if ($createdCooperationProposal->journalists()->count() > 0) { return redirect()->route('dashboard.cooperations.requests.index')->with('success-status', 'Berhasil melakukan pengajuan kerjasama.'); } else { @@ -156,6 +187,23 @@ public function rejectAction(Request $request, $id){ 'rejection_reason' => $validatedData['rejection_reason'], ]); + // Announcements + $announcementData = [ + 'headline' => 'Ajuan Kerjasama '.$cooperation->name.' ditolak oleh media '.$mediaCooperation->name. '', + 'content' => 'Ajuan Kerjasama '.$cooperation->name.' ditolak oleh media '.$mediaCooperation->name.'
+Alasan:
'.$validatedData['rejection_reason'].'