'Kerjasama' ]); } public function create(){ return view('dashboard.media-cooperations.create', [ 'title' => 'Tambah Kerjasama', 'media' => Media::all() ]); } public function store(CooperationRequest $request){ $validatedData = $request->validated(); try{ $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); $createdCooperation->media()->attach($validatedData['media_ids']); // Announcements $userId = []; foreach($validatedData['media_ids'] as $mediaId){ $userId[] = Media::find($mediaId)->company->user->id; } $announcementData = [ 'headline' => 'Ajuan kerjasama baru: '. $createdCooperation->name. '', 'content' => '

Kerjasama: '. $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 kerjasama.'); } else { return redirect()->back()->with('failed-status', 'Gagal menambahkan kerjasama'); } }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal menambahkan kerjasama'); } } public function edit($id){ $cooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); return view('dashboard.media-cooperations.edit', [ 'title' => 'Ubah Kerjasama', '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 kerjasama '. $oldCooperationName. '', 'content' => '

Admin telah melakukan pembaruan pada kerjasama ' . $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 kerjasama.'); } else { return redirect()->back()->with('failed-status', 'Gagal mengubah kerjasama'); } }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah kerjasama'); } } public function show($id){ $mediaCooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); return view('dashboard.media-cooperations.show', [ 'title' => 'Detail Kerjasama', 'mediaCooperation' => $mediaCooperation ]); } public function mediaProposal($id){ $mediaCooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id)); return view('dashboard.media-cooperations.media-proposals.index', [ 'title' => 'Data Pengajuan Kerjasama', '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 Kerjasama', '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 kerjasama '. $proposal->cooperation->name .' telah disetujui', 'content' => '

Admin telah menyetujui formulir pengajuan kerjasama Anda.

Sekarang, kerjasama ini sudah tersedia di menu Kerjasama. 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 kerjasama.'); } else { return redirect()->back()->with('failed-status', 'Gagal menyetujui pengajuan kerjasama'); } }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal menyetujui pengajuan kerjasama'); } } 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 Kerjasama', '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 kerjasama '. $proposal->cooperation->name .' ditolak', 'content' => '

Admin telah menolak formulir pengajuan kerjasama 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 kerjasama.'); } else { return redirect()->back()->with('failed-status', 'Gagal menolak pengajuan kerjasama'); } }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal menolak pengajuan kerjasama'); } } public function process($id, $process, $paramMediaId = null){ $mediaCooperation = Cooperation::with(['media', 'mediaOrder.media'])->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'])){ $reports = $data['mediaOrder']->reports->filter(function ($reports) use ($data) { 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; } } // Tab Kerjasama if($process === 'cooperation'){ $data['title'] = 'Detail Kerjasama'; 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) use ($data) { 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 }else if($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) 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.media-orders.index', $data); // Tab laporan }else if($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); } } // Tab Selesai }else if($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); } } else if($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 kerjasama dan semua media berhasil dihapus.' ]); }else{ return response()->json(['message' => 'Kerjasama sudah memiliki media order.'], 500); } }catch(\Exception $e){ return response()->json(['message' => 'Gagal menghapus ajuan kerjasama.'], 500); } // return response()->json([ // 'status' => 'warning', // 'message' => 'Aksi belum tersedia.' // ]); } }