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'].'

+ ', + '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 menolak kerjasama.'); } else { diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index a2e8c97..7d2181c 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -402,19 +402,33 @@ public function news(Request $request){ } - public function announcement(Request $request){ + public function announcement(Request $request, $category){ if ($request->ajax()) { - $data = Announcement::whereHas('media', function ($query) { - $query->where('announcements_media.category', 'general'); - })->get(); + $data = Announcement::whereHas('users', function ($query) use ($category){ + $query->where('announcements_users.category', $category); + }) + ->where(function ($query) { + $query->whereHas('users', function ($query) { + $query->where('announcements_users.category', '!=', 'system'); + }) + ->orWhere('enhancer_id', '!=', Auth::id()); + }) + ->get(); return DataTables::of($data) ->addIndexColumn() - ->addColumn('sent_at', function ($data) { - return idn_date($data->created_at, 'l, d F Y'); + ->addColumn('sender', function ($data) use ($category) { + if ($category === 'system') { + return 'Sistem'; + }else{ + return 'Admin'; + } }) - ->addColumn('action', function ($data) { + ->addColumn('sent_at', function ($data) { + return idn_date($data->created_at, 'l, d F Y H:i'); + }) + ->addColumn('action', function ($data) use ($category){ $showUrl = route('dashboard.announcements.show', ['id' => encrypt_id($data->id)]); $editUrl = route('dashboard.announcements.edit', ['id' => encrypt_id($data->id)]); @@ -424,14 +438,19 @@ public function announcement(Request $request){ $dropdown = ' +
+
+ Link + + @if (filled($announcement->link)) + {{$announcement->link}} + @else + - + @endif + +
+
{{--
--}} diff --git a/resources/views/dashboard/announcements/show.blade.php b/resources/views/dashboard/announcements/show.blade.php index 8614f42..8d20fd0 100644 --- a/resources/views/dashboard/announcements/show.blade.php +++ b/resources/views/dashboard/announcements/show.blade.php @@ -25,7 +25,7 @@
Headline - {{$announcement->headline}} + {!!$announcement->headline!!}
@@ -34,23 +34,37 @@ {{idn_date($announcement->created_at, 'l, d F Y')}}
+
+
+ Link + + @if (filled($announcement->link)) + {{$announcement->link}} + @else + - + @endif + +
+
{{--
--}} + @if ($announcement->users[0]->pivot->category !== 'system')
- Media + Pengguna
- @foreach ($announcement->media as $media) - {{$media->name}} + @foreach ($announcement->users as $user) + {{$user->name}} @endforeach
+ @endif
Konten @@ -63,9 +77,39 @@
+ @if (filled($announcement->attachment)) +
+
+ +
+
+
+
+
+ @if (filled($announcement->attachment)) + + @else + - + @endif +
+
+
+
+
+
+
+ @endif
Kembali - Ubah + @if ($announcement->users[0]->pivot->category !== 'system') + Ubah + @endif
diff --git a/resources/views/dashboard/cooperation-requests/media-proposals/edit.blade.php b/resources/views/dashboard/cooperation-requests/media-proposals/edit.blade.php index abb75f3..e490a1d 100644 --- a/resources/views/dashboard/cooperation-requests/media-proposals/edit.blade.php +++ b/resources/views/dashboard/cooperation-requests/media-proposals/edit.blade.php @@ -28,7 +28,7 @@ Data Pengajuan - + @csrf @method('put')
@@ -320,7 +320,7 @@
Kembali - +
diff --git a/resources/views/dashboard/cooperation-requests/reject.blade.php b/resources/views/dashboard/cooperation-requests/reject.blade.php index 4aab1d2..cae6a19 100644 --- a/resources/views/dashboard/cooperation-requests/reject.blade.php +++ b/resources/views/dashboard/cooperation-requests/reject.blade.php @@ -120,7 +120,7 @@
{{-- {{dd($mediaCooperationPivot->status != '0')}} --}} -
+ @csrf
@@ -142,7 +142,7 @@
Kembali @if ($mediaCooperationPivot->status === '0') - + @endif
diff --git a/resources/views/dashboard/media-cooperations/media-proposals/reject.blade.php b/resources/views/dashboard/media-cooperations/media-proposals/reject.blade.php index 1511d6e..630d230 100644 --- a/resources/views/dashboard/media-cooperations/media-proposals/reject.blade.php +++ b/resources/views/dashboard/media-cooperations/media-proposals/reject.blade.php @@ -332,7 +332,7 @@
{{-- {{dd($mediaCooperationPivot->status != '0')}} --}} -
+ @csrf
diff --git a/resources/views/partials/app/datatable.blade.php b/resources/views/partials/app/datatable.blade.php index 89546b0..39fb9ec 100644 --- a/resources/views/partials/app/datatable.blade.php +++ b/resources/views/partials/app/datatable.blade.php @@ -190,18 +190,39 @@ $('#announcementsTable').DataTable({ processing: true, serverSide: true, - ajax: '{{ route('dashboard.announcements.data') }}', + ajax: '{{ route('dashboard.announcements.data', ["type" => $category]) }}', columns: [ { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false }, { data: 'headline', name: 'headline' }, + { data: 'sender', name: 'sender' }, { data: 'sent_at', name: 'sent_at' }, { data: 'action', name: 'action', orderable: false, searchable: false }, { data: 'created_at', name: 'created_at', visible: false }, { data: 'id', name: 'id', orderable: true, searchable: false, visible: false }, ], + columnDefs: [ + { targets: 0, width: '10%' }, // Kolom No + { + targets: 1, + width: '30%', + createdCell: function(td, cellData, rowData, row, col) { + // Membungkus teks di kolom Headline + $(td).css({ + 'word-wrap': 'break-word', + 'white-space': 'normal', + 'overflow-wrap': 'break-word' + }); + } + }, // Kolom Headline + { targets: 2, width: '10%' }, // Kolom Pengirim + { targets: 3, width: '18%' }, // Kolom Tanggal + { targets: 4, width: '5%' }, // Kolom aksi + ], language: datatableLanguage, autoWidth: false, - order: [[5, 'desc']], + order: [ + [5, 'desc'] + ], pagingType: "simple", lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']], scrollX: true @@ -216,20 +237,42 @@ $('#mediaAnnouncementsTable').DataTable({ processing: true, serverSide: true, - ajax: '{{ route('dashboard.announcements.media.data') }}', + ajax: '{{ route('dashboard.announcements.media.data', ["type" => $category]) }}', columns: [ { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false }, { data: 'headline', name: 'headline' }, - { data: 'sent_at', name: 'sent_at' }, { data: 'sender', name: 'sender' }, + { data: 'sent_at', name: 'sent_at' }, { data: 'status', name: 'status' }, { data: 'action', name: 'action', orderable: false, searchable: false }, { data: 'created_at', name: 'created_at', visible: false }, { data: 'id', name: 'id', orderable: true, searchable: false, visible: false }, ], + columnDefs: [ + { targets: 0, width: '10%' }, // Kolom No + { + targets: 1, + width: '30%', + createdCell: function(td, cellData, rowData, row, col) { + // Membungkus teks di kolom Headline + $(td).css({ + 'word-wrap': 'break-word', + 'white-space': 'normal', + 'overflow-wrap': 'break-word' + }); + } + }, // Kolom Headline + { targets: 2, width: '10%' }, // Kolom Pengirim + { targets: 3, width: '18%' }, // Kolom Tanggal + { targets: 4, width: '10%' }, // Kolom Status + { targets: 5, width: '5%' }, // Kolom aksi + ], language: datatableLanguage, autoWidth: false, - order: [[6, 'desc']], + order: [ + [4, 'desc'], + [6, 'desc'] + ], pagingType: "simple", lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']], scrollX: true diff --git a/routes/web.php b/routes/web.php index a54d639..751c69e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -171,8 +171,8 @@ Route::get('/{id}/read', 'read')->name('read'); }); - Route::get('/data', [DatatableController::class, 'announcement'])->name('data'); - Route::get('/announcement-media-data', [DatatableController::class, 'mediaAnnouncement'])->name('media.data'); + Route::get('/data/{type?}', [DatatableController::class, 'announcement'])->name('data'); + Route::get('/announcement-media-data/{type}', [DatatableController::class, 'mediaAnnouncement'])->name('media.data'); });