From d0c9a2997019a1694ca9728c90c84eae6f7dfd4f Mon Sep 17 00:00:00 2001 From: myuqinurrohman Date: Fri, 7 Mar 2025 21:49:52 +0700 Subject: [PATCH] feat: media cooperation feat: cooperation request --- app/Helpers/CustomHelper.php | 20 + .../CooperationRequestController.php | 131 +++ .../Dashboard/DatatableController.php | 276 ++++- .../Dashboard/MediaCooperationController.php | 98 ++ app/Http/Requests/CooperationRequest.php | 63 ++ app/Models/Cooperation.php | 31 + app/Models/CooperationProposal.php | 21 + app/Models/Media.php | 8 + app/Models/MediaCooperation.php | 26 + ...03_06_065030_create_cooperations_table.php | 36 + ...065740_create_media_cooperations_table.php | 33 + ...227_create_cooperation_proposals_table.php | 35 + .../seeders/CooperationProposalSeeder.php | 17 + database/seeders/CooperationSeeder.php | 17 + database/seeders/MediaCooperationSeeder.php | 17 + public/assets/dashboard/css/custom.css | 42 + public/assets/dashboard/js/script-wizard.js | 1002 +++++++++++++++++ .../cooperation-requests/index.blade.php | 66 ++ .../cooperation-requests/proposal.blade.php | 324 ++++++ .../cooperation-requests/reject.blade.php | 157 +++ .../cooperation-requests/show.blade.php | 158 +++ .../media-cooperations/create.blade.php | 118 ++ .../media-cooperations/edit.blade.php | 119 ++ .../media-cooperations/index.blade.php | 65 ++ .../media-cooperations/show.blade.php | 151 +++ .../views/partials/app/datatable.blade.php | 90 ++ .../views/partials/app/sweetalert.blade.php | 99 ++ .../views/partials/dashboard/footer.blade.php | 5 + .../partials/dashboard/sidebar.blade.php | 14 +- routes/web.php | 48 +- 30 files changed, 3262 insertions(+), 25 deletions(-) create mode 100644 app/Http/Controllers/Dashboard/CooperationRequestController.php create mode 100644 app/Http/Controllers/Dashboard/MediaCooperationController.php create mode 100644 app/Http/Requests/CooperationRequest.php create mode 100644 app/Models/Cooperation.php create mode 100644 app/Models/CooperationProposal.php create mode 100644 app/Models/MediaCooperation.php create mode 100644 database/migrations/2025_03_06_065030_create_cooperations_table.php create mode 100644 database/migrations/2025_03_06_065740_create_media_cooperations_table.php create mode 100644 database/migrations/2025_03_07_072227_create_cooperation_proposals_table.php create mode 100644 database/seeders/CooperationProposalSeeder.php create mode 100644 database/seeders/CooperationSeeder.php create mode 100644 database/seeders/MediaCooperationSeeder.php create mode 100644 public/assets/dashboard/js/script-wizard.js create mode 100644 resources/views/dashboard/cooperation-requests/index.blade.php create mode 100644 resources/views/dashboard/cooperation-requests/proposal.blade.php create mode 100644 resources/views/dashboard/cooperation-requests/reject.blade.php create mode 100644 resources/views/dashboard/cooperation-requests/show.blade.php create mode 100644 resources/views/dashboard/media-cooperations/create.blade.php create mode 100644 resources/views/dashboard/media-cooperations/edit.blade.php create mode 100644 resources/views/dashboard/media-cooperations/index.blade.php create mode 100644 resources/views/dashboard/media-cooperations/show.blade.php diff --git a/app/Helpers/CustomHelper.php b/app/Helpers/CustomHelper.php index 8a8ba19..b81a556 100644 --- a/app/Helpers/CustomHelper.php +++ b/app/Helpers/CustomHelper.php @@ -1,5 +1,7 @@ role_id === 3){ + $mediaId = $user->company->media->id; + + $media = Media::with('cooperations')->findOrFail($mediaId); + return $media->cooperations() + ->where('start_date', '<=', Carbon::now()->locale('id')->toDateString()) + ->where('end_date', '>=', Carbon::now()->locale('id')->toDateString()) + ->count(); + + }else{ + return 0; + } + } +} diff --git a/app/Http/Controllers/Dashboard/CooperationRequestController.php b/app/Http/Controllers/Dashboard/CooperationRequestController.php new file mode 100644 index 0000000..07128e4 --- /dev/null +++ b/app/Http/Controllers/Dashboard/CooperationRequestController.php @@ -0,0 +1,131 @@ + 'Ajuan Kerjasama' + ]); + } + + public function show($id){ + $cooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); + + $mediaCooperationPivot = $cooperation->media() + ->where('media.id', Auth::user()->company->media->id) + ->first()->pivot; + + return view('dashboard.cooperation-requests.show', [ + 'title' => 'Tolak Kerjasama', + 'cooperation' => $cooperation, + 'mediaCooperationPivot' => $mediaCooperationPivot + ]); + } + + public function accept(Request $request, $id){ + + if(!Auth::check() || Auth::user()->role_id !== 3){ + return abort(403, 'Unauthorized action.'); + } + + $cooperation = Cooperation::with('media')->findOrFail(decrypt_id($id)); + + $mediaCooperation = $cooperation->media() + ->where('media.id', Auth::user()->company->media->id) + ->first(); + + if (!$mediaCooperation) { + 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 != '3') { + $affectedRows = $cooperation->media()->updateExistingPivot($mediaCooperation->id, [ + 'status' => '1', + ]); + + if ($affectedRows > 0) { + return redirect()->back()->with('success-status', 'Berhasil menerima kerjasama.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal menerima kerjasama'); + } + } else { + return redirect()->back()->with('failed-status', 'Kerjasama sudah diterima sebelumnya.'); + } + + } + + public function proposal($id){ + return view('dashboard.cooperation-requests.proposal', [ + 'title' => 'Ajukan Kerjasama', + 'user' => Auth::user() + ]); + } + + public function reject($id){ + $cooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); + + $mediaCooperationPivot = $cooperation->media() + ->where('media.id', Auth::user()->company->media->id) + ->first()->pivot; + + return view('dashboard.cooperation-requests.reject', [ + 'title' => 'Tolak Kerjasama', + 'cooperation' => $cooperation, + 'mediaCooperationPivot' => $mediaCooperationPivot + ]); + } + + public function rejectAction(Request $request, $id){ + + if(!Auth::check() || Auth::user()->role_id !== 3){ + return abort(403, 'Unauthorized action.'); + } + + $validatedData = $request->validate([ + 'rejection_reason' => ['required'], + ], [ + 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', + ]); + + $cooperation = Cooperation::with('media')->findOrFail(decrypt_id($id)); + + $mediaCooperation = $cooperation->media() + ->where('media.id', Auth::user()->company->media->id) + ->first(); + + if (!$mediaCooperation) { + 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 != '3') { + $affectedRows = $cooperation->media()->updateExistingPivot($mediaCooperation->id, [ + 'status' => '2', + 'rejection_reason' => $validatedData['rejection_reason'], + ]); + + if ($affectedRows > 0) { + return redirect()->back()->with('success-status', 'Berhasil menolak kerjasama.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal menolak kerjasama'); + } + } else { + return redirect()->back()->with('failed-status', 'Kerjasama sudah ditolak sebelumnya.'); + } + + } +} diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index 3089066..ba744b5 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -7,6 +7,7 @@ use App\Models\Classification; use App\Models\Company; use App\Models\ContentRecap; +use App\Models\Cooperation; use App\Models\GovernmentAgency; use App\Models\IssueManagement; use App\Models\Journalist; @@ -18,7 +19,9 @@ use App\Models\SubClassification; use App\Models\SubLocation; use App\Models\User; +use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; use SebastianBergmann\Type\TrueType; use Yajra\DataTables\DataTables; @@ -61,7 +64,7 @@ public function classification(Request $request){ $dropdown = '