feat: edit cooperation proposal

This commit is contained in:
myuqinurrohman 2025-03-10 13:35:06 +07:00
parent 32d0449652
commit 859502a7e2
6 changed files with 403 additions and 14 deletions

View File

@ -107,7 +107,7 @@ public function proposalAction(JournalistCooperationProposalRequest $request, $i
$createdCooperationProposal->journalists()->attach($validatedData['journalist_ids']);
if ($createdCooperationProposal->journalists()->count() > 0) {
return redirect()->back()->with('success-status', 'Berhasil melakukan pengajuan kerjasama.');
return redirect()->route('dashboard.cooperations.requests.index')->with('success-status', 'Berhasil melakukan pengajuan kerjasama.');
} else {
return redirect()->back()->with('failed-status', 'Gagal melakukan pengajuan kerjasama');
}
@ -150,9 +150,6 @@ public function rejectAction(Request $request, $id){
}
// 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',
@ -169,4 +166,55 @@ public function rejectAction(Request $request, $id){
}
}
public function editProposal($id){
$proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($id));
return view('dashboard.cooperation-requests.media-proposals.edit',[
'title' => 'Ubah Ajuan Kerjasama',
'proposal' => $proposal,
'selectedJournalists' => $proposal->journalists->pluck('id')->toArray()
]);
}
public function updateProposal(JournalistCooperationProposalRequest $request, $id){
$validatedData = $request->validated();
$validatedData['media_id'] = Auth::user()->company->media->id;
$proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($id));
$validatedData['cooperation_id'] = $proposal->cooperation_id;
if($request->hasFile('attachment')){
$validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/cooperation-proposals', 'public')['randomFileName'];
delete_file('app/public/uploads/cooperation-proposals/'.$proposal->image);
}else{
$validatedData['attachment'] = $proposal->attachment;
}
$proposal->update($validatedData);
if($request->has('journalist_ids')){
$proposal->journalists()->sync($validatedData['journalist_ids']);
}
if ($proposal->journalists()->count() > 0) {
return redirect()->back()->with('success-status', 'Berhasil mengubah pengajuan kerjasama.');
} else {
return redirect()->back()->with('failed-status', 'Gagal mengubah pengajuan kerjasama');
}
}
public function destroyProposal($id){
try {
$cooperationProposal = CooperationProposal::findOrFail(decrypt_id($id));
delete_file('app/public/uploads/cooperation-proposals/'.$cooperationProposal->attachment);
$cooperationProposal->delete();
return response()->json(['message' => 'Berhasil menghapus ajuan kerjasama.']);
} catch (\Exception $e) {
return response()->json(['message' => 'Gagal menghapus ajuan kerjasama.'], 500);
}
}
}

View File

@ -746,7 +746,7 @@ public function cooperation(Request $request){
}
if (is_role([1])) {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus tema '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus kerjasama '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
}
@ -1052,9 +1052,9 @@ public function mediaProposal(Request $request){
$showUrl = route('dashboard.cooperations.requests.media.proposals.show', ['id' => encrypt_id($data->id)]);
$editUrl = route('dashboard.cooperations.edit', ['id' => encrypt_id($data->id)]);
$editUrl = route('dashboard.cooperations.requests.proposal.edit', ['id' => encrypt_id($data->id)]);
$deleteUrl = route('dashboard.cooperations.destroy', ['id' => encrypt_id($data->id)]);
$deleteUrl = route('dashboard.cooperations.requests.proposal.destroy', ['id' => encrypt_id($data->id)]);
$dropdown = '<div class="dropdown" style="display:flex; justify-content:center;">
<a class="dropdown-toggle btn btn-icon btn-light" data-bs-toggle="dropdown"><em class="icon ni ni-more-v"></em></a>
@ -1067,7 +1067,7 @@ public function mediaProposal(Request $request){
}
if (is_role(['3']) && $data->status === '0') {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus tema ? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus ajuan kerjasama '.$data->cooperation->name.' ? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
}
$dropdown .= '</ul>

View File

@ -22,12 +22,19 @@ public function authorize(): bool
*/
public function rules(): array
{
return [
$rules = [
'journalist_ids' => ['required', 'array'],
'journalist_ids.*' => ['required', 'exists:journalists,id'],
'attachment' => ['required', 'file', 'mimes:pdf', 'max:2048'],
'description' => ['nullable']
];
if($this->isMethod('post')){
$rules['attachment'] = ['required', 'file', 'mimes:pdf', 'max:2048'];
}else{
$rules['attachment'] = ['nullable', 'file', 'mimes:pdf', 'max:2048'];
}
return $rules;
}
public function messages(): array

View File

@ -0,0 +1,334 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'cooperation_requests'])
@include('partials.dashboard.header')
<!-- content @s -->
<div class="nk-content ">
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block nk-block-lg">
<div class="card card-bordered card-preview">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-primary" href="#"><em class="icon ni ni-file-docs"></em><span>Detail Pengajuan Kerjasama</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<ul class="nav nav-tabs mt-n3">
<li class="nav-item">
<a class="nav-link active" data-bs-toggle="tab" href="#companyData">Data Perusahaan</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#mediaData">Data Media</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#journalistData">Data Jurnalis</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#proposalData">Data Pengajuan</a>
</li>
</ul>
<form action="{{route('dashboard.cooperations.requests.proposal.update', ['id' => encrypt_id($proposal->id)])}}" method="post" enctype="multipart/form-data">
@csrf
@method('put')
<div class="tab-content">
<div class="tab-pane active" id="companyData">
<div class="profile-ud-list mt-2">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Nama perusahaan</span>
<span class="profile-ud-value">{{$proposal->media->company->name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Email Perusahaan</span>
<span class="profile-ud-value">{{$proposal->media->company->email}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Direktur</span>
<span class="profile-ud-value">{{$proposal->media->company->director_name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">NIK Direktur</span>
<span class="profile-ud-value">
@if ($proposal->media->company->director_nik_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->director_nik_doc)}}" target="__blank">{{$proposal->media->company->director_nik}}</a>
@else
{{$proposal->media->company->director_nik ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Alamat</span>
<span class="profile-ud-value">{{$proposal->media->company->address}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Akta Pendirian</span>
<span class="profile-ud-value">
@if ($proposal->media->company->deed_incorporation_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->deed_incorporation_doc)}}" target="__blank">{{$proposal->media->company->deed_incorporation}}</a>
@else
{{$proposal->media->company->deed_incorporation ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">SPT Tahunan</span>
<span class="profile-ud-value">
@if ($proposal->media->company->annual_tax_return_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->annual_tax_return_doc)}}" target="__blank">{{$proposal->media->company->annual_tax_return}}</a>
@else
{{$proposal->media->company->annual_tax_return ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">NPWP</span>
<span class="profile-ud-value">
@if ($proposal->media->company->tax_id_number_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->tax_id_number_doc)}}" target="__blank">{{$proposal->media->company->tax_id_number}}</a>
@else
{{$proposal->media->company->tax_id_number ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">PKP</span>
<span class="profile-ud-value">
@if ($proposal->media->company->taxable_enterprise_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->taxable_enterprise_doc)}}" target="__blank">{{$proposal->media->company->taxable_enterprise}}</a>
@else
{{$proposal->media->company->taxable_enterprise ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Suket Domisili</span>
<span class="profile-ud-value">
@if ($proposal->media->company->domicile_certificate_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->domicile_certificate_doc)}}" target="__blank">{{$proposal->media->company->domicile_certificate}}</a>
@else
{{$proposal->media->company->domicile_certificate ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">SIUP</span>
<span class="profile-ud-value">
@if ($proposal->media->company->trade_license_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->trade_license_doc)}}" target="__blank">{{$proposal->media->company->trade_license}}</a>
@else
{{$proposal->media->company->trade_license ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Profile</span>
<span class="profile-ud-value">
@if ($proposal->media->company->profile_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->profile_doc)}}" target="__blank">{{$proposal->media->company->profile}}</a>
@else
{{$proposal->media->company->profile ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Penawaran Kerja</span>
<span class="profile-ud-value">
@if ($proposal->media->company->cooperation_request_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->company->cooperation_request_doc)}}" target="__blank">{{$proposal->media->company->cooperation_request}}</a>
@else
{{$proposal->media->company->cooperation_request ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
@switch($proposal->media->company->user->status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-success">Diterima</span></span>
@break
@case(2)
<span class="profile-ud-value"><span class="badge bg-danger">Ditolak</span></span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</div>
</div>
</div><!-- .profile-ud-list -->
</div>
<div class="tab-pane" id="mediaData">
<div class="profile-ud-list mt-2">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Nama Media</span>
<span class="profile-ud-value">{{$proposal->media->name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Jenis</span>
<span class="profile-ud-value">{{ucfirst($proposal->media->type)}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Klasifikasi</span>
<span class="profile-ud-value">{{ucfirst($proposal->media->classification)}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Alamat</span>
<span class="profile-ud-value">{{$proposal->media->address}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Organisasi Kewartawanan</span>
<span class="profile-ud-value">
@if ($proposal->media->journalism_organization_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->journalism_organization_doc)}}" target="__blank">{{$proposal->media->journalism_organization}}</a>
@else
{{$proposal->media->journalism_organization ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Sertifikat Dewan Press</span>
<span class="profile-ud-value">
@if ($proposal->media->press_council_certificate_doc)
<a href="{{asset('storage/uploads/companies/'. $proposal->media->press_council_certificate_doc)}}" target="__blank">{{$proposal->media->press_council_certificate}}</a>
@else
{{$proposal->media->press_council_certificate ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
@switch($proposal->media->company->user->status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-success">Diterima</span></span>
@break
@case(2)
<span class="profile-ud-value"><span class="badge bg-danger">Ditolak</span></span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</div>
</div>
</div><!-- .profile-ud-list -->
</div>
<div class="tab-pane" id="journalistData">
<div class="row g-gs mt-2">
<div class="col-md-12 col-lg-12">
<span class="preview-title overline-title">Pilih Jurnalis</span>
<ul class="custom-control-group custom-control-vertical w-100">
@foreach ($proposal->media->journalists as $journalist)
<li>
<div class="custom-control custom-control-sm custom-checkbox custom-control-pro">
<input type="checkbox" class="custom-control-input" id="journalists-{{$journalist->id}}" name="journalist_ids[]" value="{{$journalist->id}}" @checked(in_array($journalist->id, $selectedJournalists)) required>
<label class="custom-control-label" for="journalists-{{$journalist->id}}">
<span class="user-card">
<span class="user-avatar sm bg-info">
<em class="icon ni ni-user-alt"></em>
</span>
<span class="user-info">
<span class="lead-text">{{$journalist->name}}</span>
<span class="sub-text"><em class="icon ni ni-call"></em>&nbsp;{{$journalist->phone_number}}</span>
<span class="sub-text"><em class="icon ni ni-mail"></em>&nbsp;{{$journalist->email}}</span>
</span>
</span>
</label>
</div>
</li>
@endforeach
</ul>
</div>
</div>
</div>
<div class="tab-pane" id="proposalData">
<div class="row gy-2 mt-2">
<div class="col-md-6">
<div class="form-group">
<label class="form-label" for="attachment">Lampiran Pengajuan</label>
<div class="form-control-wrap">
<input type="file" data-msg="Wajib Di isi" class="form-control required" id="attachment" name="attachment" accept="application/pdf">
</div>
</div>
</div><!-- .col -->
<div class="col-md-6">
<div class="form-group">
<label class="form-label" for="offer_file_download">Template Lampiran Pengajuan</label>
<div class="form-control-wrap">
<a href="{{asset('storage/uploads/cooperations/'. $proposal->cooperation->offer_file_template)}}" class="btn btn-info" style="width: 100%;" download="template-pengajuan-{{slugify($proposal->cooperation->name. '.pdf')}}">
<em class="icon ni ni-download" style="margin-top: -0.2rem"></em> Unduh template pengajuan
</a>
</div>
</div>
</div><!-- .col -->
<div class="col-md-12">
<div class="form-group">
<label class="form-label" for="fw-token-address">Deskripsi</label>
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="description">{!!$proposal->description!!}</textarea>
</div>
</div>
</div>
</div><!-- .row -->
</div>
</div>
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.cooperations.requests.media.proposals')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<button type="submit" class="btn btn-md btn-primary">Simpan</button>
</div><!-- .nk-block -->
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -324,7 +324,7 @@
</div>
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.cooperations.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<a href="{{route('dashboard.cooperations.requests.media.proposals')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
</div><!-- .nk-block -->
</div>
</div>

View File

@ -266,9 +266,9 @@
Route::post('/{id}/reject', 'rejectAction')->name('reject.action');
Route::get('/{id}/edit', 'edit')->name('edit');
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
Route::get('/{id}/edit', 'editProposal')->name('proposal.edit');
Route::put('/{id}', 'updateProposal')->name('proposal.update');
Route::delete('/{id}', 'destroyProposal')->name('proposal.destroy');
});
Route::get('/data', [DatatableController::class, 'cooperationRequest'])->name('data');