'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';
// dd($data['mediaOrder']);
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) {
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
// dd($reports);
$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.'
// ]);
}
}