simedkom/app/Http/Controllers/Dashboard/MediaCooperationController.php
2025-03-17 10:41:04 +07:00

252 lines
9.8 KiB
PHP

<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Requests\CooperationRequest;
use App\Models\Cooperation;
use App\Models\CooperationProposal;
use App\Models\Media;
use App\Models\MediaOrder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class MediaCooperationController extends Controller
{
public function index(){
return view('dashboard.media-cooperations.index', [
'title' => 'Kerjasama'
]);
}
public function create(){
return view('dashboard.media-cooperations.create', [
'title' => 'Tambah Kerjasama',
'media' => Media::all()
]);
}
public function store(CooperationRequest $request){
$validatedData = $request->validated();
$validatedData['enhancer_id'] = Auth::id();
$validatedData['banner'] = store_file($validatedData['banner'], '/uploads/cooperations', 'public')['randomFileName'];
$validatedData['offer_file_template'] = store_file($validatedData['offer_file_template'], '/uploads/cooperations', 'public')['randomFileName'];
$createdCooperation = Cooperation::create($validatedData);
$createdCooperation->media()->attach($validatedData['media_ids']);
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');
}
}
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();
$cooperation = Cooperation::with(['media'])->findOrFail(decrypt_id($id));
$validatedData['enhancer_id'] = Auth::id();
if($request->hasFile('banner')){
delete_file('app/public/uploads/cooperations/'.$cooperation->banner);
$validatedData['banner'] = store_file($validatedData['banner'], '/uploads/cooperations', 'public')['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', 'public')['randomFileName'];
}else{
$validatedData['offer_file_template'] = $cooperation->offer_file_template;
}
$cooperation->update($validatedData);
if ($request->has('media_ids')) {
$cooperation->media()->sync($validatedData['media_ids']);
}
if ($cooperation->media()->count() > 0) {
return redirect()->back()->with('success-status', 'Berhasil mengubah kerjasama.');
} else {
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){
$proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId));
$acceptedProposal = $proposal->update([
'status' => '1'
]);
if ($acceptedProposal) {
return redirect()->back()->with('success-status', 'Berhasil menyetujui pengajuan kerjasama.');
} else {
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.',
]);
$proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId));
$rejectedProposal = $proposal->update([
'status' => '2',
'rejection_reason' => $validatedData['rejection_reason']
]);
if ($rejectedProposal) {
return redirect()->back()->with('success-status', 'Berhasil menolak pengajuan kerjasama.');
} else {
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 = [
'title' => 'Detail Kerjasama',
'process' => $process,
'mediaCooperation' => $mediaCooperation,
];
if($process === 'cooperation'){
$data['title'] = 'Detail Kerjasama';
$data['mediaOrder'] = $mediaCooperation->mediaOrder;
if(is_role(['3'])){
$mediaId = Auth::user()->company->media->id;
$mediaOrder = $mediaCooperation->mediaOrder;
$mediaOrderSafe = $mediaOrder ? $mediaOrder->media->where('id', $mediaId)->first() : null;
if($mediaOrderSafe){
$data['mediaOrderPivot'] = $mediaOrderSafe->pivot;
}
$data['isHaveReports'] = false;
$data['isAllReportsWaiting'] = true;
}
return view('dashboard.media-cooperations.processes.cooperations.index', $data);
}else if($process === 'media-order'){
$data['title'] = 'Media Order';
if(is_role(['3'])){
$data['mediaOrder'] = $mediaCooperation->mediaOrder;
$mediaId = Auth::user()->company->media->id;
$data['mediaOrderPivot'] = $mediaCooperation->mediaOrder->media->where('id', $mediaId)->first()->pivot;
$data['isHaveReports'] = false;
$data['isAllReportsWaiting'] = true;
}else{
$data['mediaOrder'] = $mediaCooperation->mediaOrder;
}
return view('dashboard.media-cooperations.processes.media-orders.index', $data);
}else if($process === 'reports'){
$data['title'] = 'Media Order';
if(is_role(['3'])){
$mediaOrderModel = $mediaCooperation->mediaOrder;
$data['mediaOrder'] = $mediaOrderModel;
$mediaId = Auth::user()->company->media->id;
$data['mediaOrderPivot'] = $mediaOrderModel->media->where('id', $mediaId)->first()->pivot;
$data['reporterMediaId'] = Auth::user()->company->media->id;
$report = $mediaOrderModel->reports->filter(function ($report) use ($data) {
return $report->media_id == Auth::user()->company->media->id;
});
if(filled($report)){
$isAllReportsAccepted = $report->every(function ($item) {
return $item->status === '1';
});
}else{
$isAllReportsAccepted = false;
}
$reportCount = $report->count();
$data['isHaveReports'] = $reportCount != 0;
$data['isAllReportsAccepted'] = $isAllReportsAccepted;
$data['reportCount'] = $reportCount;
if($reportCount === $mediaOrderModel->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);
}
}
}
}
public function destroy(){}
}