'Kerja Sama', 'date' => $request->input('date', null), 'month' => $request->input('month', null), 'year' => $request->input('year', null), ]); } public function create() { return view('dashboard.media-cooperations.create', [ 'title' => 'Tambah Kerja Sama', 'media' => Media::all(), ]); } public function store(CooperationRequest $request) { $validatedData = $request->validated(); try { if ($request->hasFile('banner')) { $validatedData['banner'] = store_file($validatedData['banner'], '/uploads/cooperations')['randomFileName']; } $validatedData['offer_file_template'] = store_file($validatedData['offer_file_template'], '/uploads/cooperations')['randomFileName']; $createdCooperation = DB::transaction(function () use ($validatedData) { $createdCooperation = Cooperation::create($validatedData); $allMediaIds = Media::pluck('id')->toArray(); if (in_array('all', $validatedData['media_ids'])) { $createdCooperation->media()->attach($allMediaIds); } else { $createdCooperation->media()->attach($validatedData['media_ids']); } // Announcements $userId = []; if (in_array('all', $validatedData['media_ids'])) { foreach ($allMediaIds as $mediaId) { $userId[] = Media::find($mediaId)->company->user->id; } } else { foreach ($validatedData['media_ids'] as $mediaId) { $userId[] = Media::find($mediaId)->company->user->id; } } $announcementData = [ 'headline' => 'Ajuan kerja sama baru: '.$createdCooperation->name.'', 'content' => '

Kerja Sama: '.$validatedData['name'].'

Periode Pengajuan: '.idn_date($createdCooperation->start_date).' s.d. '.idn_date($createdCooperation->end_date).'

Deskripsi:
'.$createdCooperation->description.'

', 'enhancer_id' => Auth::id(), ]; $createdAnnouncement = Announcement::create($announcementData); $createdAnnouncement->users()->attach($userId, ['category' => 'system']); // End Announcements return $createdCooperation; }); if ($createdCooperation->media()->count() > 0) { return redirect()->route('dashboard.cooperations.index')->with('success-status', 'Berhasil menambahkan kerja sama.'); } else { return redirect()->back()->with('failed-status', 'Gagal menambahkan kerja sama'); } } catch (\Exception $e) { Log::info('ERROR (Cooperation): '.$e); return redirect()->back()->with('failed-status', 'Gagal menambahkan kerja sama'); } } public function edit($id) { $cooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); return view('dashboard.media-cooperations.edit', [ 'title' => 'Ubah Kerja Sama', 'cooperation' => $cooperation, 'media' => Media::all(), 'selectedMediaIds' => $cooperation->media->pluck('id')->toArray(), ]); } public function update(CooperationRequest $request, $id) { $validatedData = $request->validated(); try { $cooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); $oldCooperationName = $cooperation->name; if ($request->hasFile('banner')) { delete_file('app/public/uploads/cooperations/'.$cooperation->banner); $validatedData['banner'] = store_file($validatedData['banner'], '/uploads/cooperations')['randomFileName']; } else { $validatedData['banner'] = $cooperation->banner; } if ($request->hasFile('offer_file_template')) { delete_file('app/public/uploads/cooperations/'.$cooperation->offer_file_template); $validatedData['offer_file_template'] = store_file($validatedData['offer_file_template'], '/uploads/cooperations')['randomFileName']; } else { $validatedData['offer_file_template'] = $cooperation->offer_file_template; } $cooperation->update($validatedData); if ($request->has('media_ids')) { $cooperation->media()->sync($validatedData['media_ids']); } // Announcements $userId = []; foreach ($validatedData['media_ids'] as $mediaId) { $userId[] = Media::find($mediaId)->company->user->id; } $announcementData = [ 'headline' => 'Admin melakukan pembaruan pada ajuan kerja sama '.$oldCooperationName.'', 'content' => '

Admin telah melakukan pembaruan pada kerja sama '.$oldCooperationName.'. Mohon untuk segera meninjau perubahan tersebut

', 'enhancer_id' => Auth::id(), ]; $createdAnnouncement = Announcement::create($announcementData); $createdAnnouncement->users()->attach($userId, ['category' => 'system']); // End Announcements if ($cooperation->media()->count() > 0) { return redirect()->back()->with('success-status', 'Berhasil mengubah kerja sama.'); } else { return redirect()->back()->with('failed-status', 'Gagal mengubah kerja sama'); } } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal mengubah kerja sama'); } } public function show($id) { $mediaCooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); return view('dashboard.media-cooperations.show', [ 'title' => 'Detail Kerja Sama', 'mediaCooperation' => $mediaCooperation, ]); } public function export(Request $request) { try { $year = $request->input('year', null); $month = $request->input('month', null); $date = $request->input('date', null); $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); return Excel::download(new CooperationExport($year, $month, $date), 'cooperations-'.$formattedNow.'.xlsx'); } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal melakukan proses export data.'); } } public function filter(Request $request) { try { $filteredRequest = $request->except('_token'); $filterField = array_filter($filteredRequest, function ($value) { return filled($value); }); return redirect()->route('dashboard.cooperations.index', $filterField); } catch (\Exception $e) { return redirect()->back()->with('status-failed', 'Gagal melakukan proses filtering data.'); } } public function mediaProposal($id) { $mediaCooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); return view('dashboard.media-cooperations.media-proposals.index', [ 'title' => 'Data Pengajuan Kerja Sama', 'mediaCooperation' => $mediaCooperation, ]); } public function mediaProposalShow($id, $proposalId) { $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); return view('dashboard.media-cooperations.media-proposals.show', [ 'title' => 'Detail Ajuan Kerja Sama', 'proposal' => $proposal, ]); } public function mediaProposalAccept($id, $proposalId) { try { $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); $acceptedProposal = $proposal->update([ 'status' => '1', ]); // Announcements $announcementData = [ 'headline' => 'Formulir ajuan kerja sama '.$proposal->cooperation->name.' telah disetujui', 'content' => '

Admin telah menyetujui formulir pengajuan kerja sama Anda.

Sekarang, kerja sama ini sudah tersedia di menu Kerja Sama. Harap tunggu hingga Admin menerbitkan Media Order.

', 'enhancer_id' => Auth::id(), ]; $createdAnnouncement = Announcement::create($announcementData); $createdAnnouncement->users()->attach($proposal->media->company->user->id, ['category' => 'system']); // End Announcements if ($acceptedProposal) { return redirect()->back()->with('success-status', 'Berhasil menyetujui pengajuan kerja sama.'); } else { return redirect()->back()->with('failed-status', 'Gagal menyetujui pengajuan kerja sama'); } } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal menyetujui pengajuan kerja sama'); } } public function mediaProposalReject($id, $proposalId) { $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); return view('dashboard.media-cooperations.media-proposals.reject', [ 'title' => 'Tolak Ajuan Kerja Sama', 'proposal' => $proposal, ]); } public function mediaProposalRejectAction(Request $request, $id, $proposalId) { $validatedData = $request->validate([ 'rejection_reason' => ['required'], ], [ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); try { $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); $rejectedProposal = $proposal->update([ 'status' => '2', 'rejection_reason' => $validatedData['rejection_reason'], ]); // Announcements $announcementData = [ 'headline' => 'Formulir ajuan kerja sama '.$proposal->cooperation->name.' ditolak', 'content' => '

Admin telah menolak formulir pengajuan kerja sama Anda.

Alasan penolakan:
'.$validatedData['rejection_reason'].'

', 'enhancer_id' => Auth::id(), ]; $createdAnnouncement = Announcement::create($announcementData); $createdAnnouncement->users()->attach($proposal->media->company->user->id, ['category' => 'system']); // End Announcements if ($rejectedProposal) { return redirect()->back()->with('success-status', 'Berhasil menolak pengajuan kerja sama.'); } else { return redirect()->back()->with('failed-status', 'Gagal menolak pengajuan kerja sama'); } } catch (\Exception $e) { return redirect()->back()->with('failed-status', 'Gagal menolak pengajuan kerja sama'); } } public function process($id, $process, $paramMediaId = null) { $mediaCooperation = Cooperation::with([ 'media', 'mediaOrder.media', 'mediaOrder.reports', 'mediaOrder.completions', ])->findOrFail(decrypt_id($id)); $data = [ 'process' => $process, 'mediaCooperation' => $mediaCooperation, 'mediaOrder' => $mediaCooperation->mediaOrder, 'mediaId' => is_role(['3']) ? Auth::user()->company->media->id : null, ]; if (is_role(['3']) && $data['mediaOrder'] && $data['mediaOrder']->reports) { $reports = $data['mediaOrder']->reports->filter(function ($reports) { return $reports->media_id == Auth::user()->company->media->id; }); if (filled($reports)) { $isAllReportsAccepted = $reports->every(function ($item) { return $item->status === '1'; }); $data['isAllReportsAccepted'] = $isAllReportsAccepted && ($reports->count() === $data['mediaOrder']->required_reports); $data['isHaveReports'] = true; } else { $data['isAllReportsAccepted'] = false; $data['isHaveReports'] = false; } } else { $data['isAllReportsAccepted'] = false; $data['isHaveReports'] = false; } // Tab Kerja Sama if ($process === 'cooperation') { $data['title'] = 'Detail Kerja Sama'; if (is_role(['3'])) { $mediaOrderSafe = $data['mediaOrder'] ? $data['mediaOrder']->media->where('id', $data['mediaId'])->first() : null; if ($mediaOrderSafe) { $data['mediaOrderPivot'] = $mediaOrderSafe->pivot; } // Can Commented if ($mediaOrderSafe) { $reports = $data['mediaOrder']->reports->filter(function ($reports) { return $reports->media_id == Auth::user()->company->media->id; }); } else { $reports = null; } if (filled($reports)) { $data['isAllReportsAccepted'] = $reports->every(function ($item) { return $item->status === '1'; }); $data['isHaveReports'] = true; } else { $data['isAllReportsAccepted'] = false; $data['isHaveReports'] = false; } // Can Commented } return view('dashboard.media-cooperations.processes.cooperations.index', $data); // Tab Media order } elseif ($process === 'media-order') { $data['title'] = 'Media Order'; if (is_role(['3'])) { $data['mediaOrderPivot'] = $data['mediaOrder']->media->where('id', $data['mediaId'])->first()->pivot; // Can Commented $reports = $data['mediaOrder']->reports->filter(function ($reports) { return $reports->media_id == Auth::user()->company->media->id; }); if (filled($reports)) { $data['isAllReportsAccepted'] = $reports->every(function ($item) { return $item->status === '1'; }); $data['isHaveReports'] = true; } else { $data['isAllReportsAccepted'] = false; $data['isHaveReports'] = false; } // Can Commented } return view('dashboard.media-cooperations.processes.media-orders.index', $data); // Tab laporan } elseif ($process === 'reports') { $data['title'] = 'Laporan'; if (is_role(['3'])) { $data['mediaOrderPivot'] = $data['mediaOrder']->media->where('id', $data['mediaId'])->first()->pivot; $data['reporterMediaId'] = Auth::user()->company->media->id; // Can Commented // $reports = $data['mediaOrder']->reports->filter(function ($reports) use ($data) { // return $reports->media_id == Auth::user()->company->media->id; // }); // if(filled($reports)){ // $data['isAllReportsAccepted'] = $reports->every(function ($item) { // return $item->status === '1'; // }); // $data['isHaveReports'] = true; // }else{ // $data['isAllReportsAccepted'] = false; // $data['isHaveReports'] = false; // } // Can Commented $reportCount = $reports->count(); $data['reportCount'] = $reportCount; $data['cooperationCompletion'] = $data['mediaOrder']->completions()->where('media_id', $data['mediaId'])->first(); if ($reportCount === $data['mediaOrder']->required_reports) { $data['isReportsCompleted'] = true; } else { $data['isReportsCompleted'] = false; } return view('dashboard.media-cooperations.processes.reports.index-media', $data); } else { $data['mediaOrder'] = $mediaCooperation->mediaOrder; $data['reporterMedia'] = $paramMediaId ? Media::findOrFail(decrypt_id($paramMediaId)) : null; $data['reporterMediaId'] = $paramMediaId ? decrypt_id($paramMediaId) : null; if (! $paramMediaId) { return view('dashboard.media-cooperations.processes.reports.index-admin', $data); } else { return view('dashboard.media-cooperations.processes.reports.index-media', $data); } } // if (is_role(['3'])) { // // Pastikan mediaOrder dan relasi media tidak null // if ($data['mediaOrder'] && $data['mediaOrder']->media && $data['mediaOrder']->media->where('id', $data['mediaId'])->first()) { // $mediaOrderItem = $data['mediaOrder']->media->where('id', $data['mediaId'])->first(); // $data['mediaOrderPivot'] = $mediaOrderItem->pivot; // } else { // $data['mediaOrderPivot'] = null; // atau abort(404) jika dianggap error penting // } // $data['reporterMediaId'] = Auth::user()->company->media->id; // // Can Commented // $reports = null; // if ($data['mediaOrder'] && $data['mediaOrder']->reports) { // $reports = $data['mediaOrder']->reports->filter(function ($report) use ($data) { // return $report->media_id == Auth::user()->company->media->id; // }); // } // if (filled($reports)) { // $data['isAllReportsAccepted'] = $reports->every(function ($item) { // return $item->status === '1'; // }); // $data['isHaveReports'] = true; // } else { // $data['isAllReportsAccepted'] = false; // $data['isHaveReports'] = false; // } // // Can Commented // $reportCount = filled($reports) ? $reports->count() : 0; // $data['reportCount'] = $reportCount; // $data['cooperationCompletion'] = $data['mediaOrder'] && $data['mediaOrder']->completions() // ? $data['mediaOrder']->completions()->where('media_id', $data['mediaId'])->first() // : null; // if ($data['mediaOrder'] && $reportCount === $data['mediaOrder']->required_reports) { // $data['isReportsCompleted'] = true; // } else { // $data['isReportsCompleted'] = false; // } // // $data['meuda'] // // dd($mediaCooperation); // return view('dashboard.media-cooperations.processes.reports.index-media', $data); // } else { // $data['mediaOrder'] = $mediaCooperation->mediaOrder; // $data['reporterMedia'] = $paramMediaId ? Media::findOrFail(decrypt_id($paramMediaId)) : null; // $data['reporterMediaId'] = $paramMediaId ? decrypt_id($paramMediaId) : null; // if (!$paramMediaId) { // return view('dashboard.media-cooperations.processes.reports.index-admin', $data); // } else { // return view('dashboard.media-cooperations.processes.reports.index-media', $data); // } // } // Tab Selesai } elseif ($process === 'completion') { $data['title'] = 'Penyelesaian'; $data['isHaveReports'] = true; $data['isAllReportsAccepted'] = true; $data['cooperationCompletion'] = $data['mediaOrder']->completions()->where('media_id', $data['mediaId'])->first(); if (is_role(['3'])) { $data['mediaOrderPivot'] = $data['mediaOrder']->media->where('id', $data['mediaId'])->first()->pivot; // Can Commented // $reports = $data['mediaOrder']->reports->filter(function ($reports) use ($data) { // return $reports->media_id == Auth::user()->company->media->id; // }); // if(filled($reports)){ // $data['isAllReportsAccepted'] = $reports->every(function ($item) { // return $item->status === '1'; // }); // $data['isHaveReports'] = true; // }else{ // $data['isAllReportsAccepted'] = false; // $data['isHaveReports'] = false; // } // Can Commented return view('dashboard.media-cooperations.processes.completions.index-media', $data); } else { abort(404); } } elseif ($process === 'completions') { $data['title'] = 'Penyelesaian'; $data['isHaveReports'] = true; $data['isAllReportsAccepted'] = true; $data['cooperationCompletion'] = $data['mediaOrder']->completions()->where('media_id', $data['mediaId'])->first(); if (is_role(['1'])) { return view('dashboard.media-cooperations.processes.completions.index-admin', $data); } else { abort(404); } } else { abort(404); } } public function destroy($id) { try { $cooperation = Cooperation::with(['media', 'mediaOrder'])->findOrFail(decrypt_id($id)); if ($cooperation->mediaOrder) { DB::transaction(function () use ($cooperation) { $cooperation->media()->detach(); $cooperation->delete(); }); return response()->json([ 'status' => 'success', 'message' => 'Ajuan kerja sama dan semua media berhasil dihapus.', ]); } else { return response()->json(['message' => 'Kerja Sama sudah memiliki media order.'], 500); } } catch (\Exception $e) { return response()->json(['message' => 'Gagal menghapus ajuan kerja sama.'], 500); } // return response()->json([ // 'status' => 'warning', // 'message' => 'Aksi belum tersedia.' // ]); } }