feat: media cooperation report

This commit is contained in:
myuqinurrohman 2025-03-17 10:41:04 +07:00
parent 382c066c2f
commit cd456ff530
31 changed files with 1354 additions and 40 deletions

View File

@ -52,6 +52,13 @@ function delete_file($path)
}
}
if (! function_exists('is_file_exists')) {
function is_file_exists($path)
{
return File::exists(public_path('storage/' . $path));
}
}
if (!function_exists('get_role_name')) {
function get_role_name($role = null) {

View File

@ -871,7 +871,13 @@ public function cooperation(Request $request){
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
if (is_role([1, 3])) {
$dropdown .= '<li><a href="'.$processUrl.'"><em class="icon ni ni-loader"></em><span>Proses</span></a></li>';
if(is_role(['3'])){
$dropdown .= '<li><a href="'.$processUrl.'"><em class="icon ni ni-loader"></em><span>Proses</span></a></li>';
}
if(is_role(['1'])){
$dropdown .= '<li><a href="'.$processUrl.'"><em class="icon ni ni-loader"></em><span>Proses</span></a></li>';
}
}
if (is_role([1]) && !$isHaveMediaOrder) {
@ -1032,7 +1038,7 @@ public function cooperationProposal(Request $request, $id){
}
// media (ajuan kerjassama)
// media (ajuan kerjasama)
public function cooperationRequest(Request $request){
if ($request->ajax()) {
@ -1065,9 +1071,6 @@ public function cooperationRequest(Request $request){
->addColumn('end_date', function ($data) {
return idn_date($data->end_date, 'l, d F Y');
})
->addColumn('posted_at', function ($data) {
return idn_date($data->created_at, 'l, d F Y');
})
->addColumn('status', function ($data) use ($media){
$isCooperationProposalExists = CooperationProposal::where('cooperation_id', '=', $data->id)
->where('media_id', '=', $media->id)->exists();
@ -1275,6 +1278,154 @@ class="text-dark"
}
public function adminMediaReport(Request $request, $id){
if ($request->ajax()) {
$mediaOrder = Order::with(['reports', 'media.reports'])->findOrFail(decrypt_id($id));
$data = $mediaOrder->media;
return DataTables::of($data)
->addIndexColumn()
->addColumn('media_name', function ($data) {
return $data->name;
})
->addColumn('company_name', function ($data) {
return $data->company->name;
})
->addColumn('email', function ($data) {
return $data->company->email;
})
->addColumn('reuired_reports', function ($data) use ($mediaOrder){
$reportCount = $mediaOrder->reports->filter(function ($report) use ($data) {
return $report->media_id == $data->id; // Cek jika laporan milik media ini
})->count();
return $reportCount . "/" . $mediaOrder->required_reports;
})
->addColumn('action', function ($data) use ($mediaOrder){
$showUrl = route('dashboard.cooperations.process', ['id' => encrypt_id($mediaOrder->cooperation->id), 'process' => 'reports', 'mediaId' => encrypt_id($data->id)]);
// $editUrl = route('dashboard.reports.edit', ['id' => encrypt_id($data->id)]);
// $deleteUrl = route('dashboard.reports.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>
<div class="dropdown-menu dropdown-menu-datatable-custom dropdown-menu-end">
<ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Lihat</span></a></li>';
// if (is_role(['3']) && $data->status === '0') {
// $dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
// }
// if (is_role(['3']) && $data->status === '0') {
// $dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus laporan '.$data->title.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
// }
$dropdown .= '</ul>
</div>
</div>';
return $dropdown;
})
->rawColumns(['action'])
->make(true);
}
return response()->json(['error' => 'Unauthorized'], 401);
}
public function mediaReport(Request $request, $mediaOrderId, $mediaId){
if ($request->ajax()) {
$mediaOrder = Order::with(['reports', 'media.reports'])->findOrFail(decrypt_id($mediaOrderId));
$reportsByMedia = $mediaOrder->reports->filter(function ($report) use ($mediaId) {
return $report->media_id == decrypt_id($mediaId); // Cek jika laporan milik media ini
});
$data = $reportsByMedia;
return DataTables::of($data)
->addIndexColumn()
->addColumn('title', function ($data) {
return $data->title;
})
->addColumn('date', function ($data) {
return idn_date($data->created_at, 'l, d F Y');
})
->addColumn('status', function ($data){
switch($data->status){
case '0':
return '<span class="badge bg-warning" style="display:inline-block;font-size:0.8rem;">Menunggu</span>';
case 1:
return '<span class="badge bg-success" style="display:inline-block;font-size:0.8rem;">Diterima</span> <br>';
case '2':
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Ditolak</span> <span class="badge bg-transparent"><a href="javascript:void(0);"
class="text-dark"
onclick="showDetail('.htmlspecialchars(json_encode(strip_tags($data->rejection_reason))).')"
style="margin-top:0.2rem;">
<em class="icon ni ni-eye"></em>
</a></span>';
default:
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Diketahui</span>';
}
})
->addColumn('action', function ($data) use ($mediaOrder){
$showUrl = route('dashboard.reports.show', ['mediaOrderId' => encrypt_id($mediaOrder->id), 'id' => encrypt_id($data->id)]);
$editUrl = route('dashboard.reports.edit', ['mediaOrderId' => encrypt_id($mediaOrder->id), 'id' => encrypt_id($data->id)]);
$deleteUrl = route('dashboard.reports.destroy', ['id' => encrypt_id($data->id)]);
$acceptUrl = route('dashboard.reports.accept', ['id' => encrypt_id($data->id)]);
$rejectUrl = route('dashboard.reports.reject', ['mediaOrderId' => encrypt_id($mediaOrder->id), '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>
<div class="dropdown-menu dropdown-menu-datatable-custom dropdown-menu-end">
<ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
if (is_role(['3']) && $data->status === '0') {
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
}
if (is_role(['3']) && $data->status === '0') {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus laporan '.$data->title.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
}
if (is_role(['1']) && $data->status === '0') {
$dropdown .= '<li><a href="javascript: void(0);" onclick="itemConfirm(\''.$acceptUrl.'\', \'Apakah Anda yakin ingin menerima laporan bukti tayang ini?\', \'Ya, terima!\')"><em class="icon ni ni-check"></em><span>Terima</span></a></li>';
}
if (is_role(['1']) && $data->status === '0') {
$dropdown .= '<li><a href="'.$rejectUrl.'"><em class="icon ni ni-cross"></em><span>Tolak</span></a></li>';
}
if (is_role(['3']) && $data->status === '2') {
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit-alt"></em><span>Perbaiki</span></a></li>';
}
$dropdown .= '</ul>
</div>
</div>';
return $dropdown;
})
->rawColumns(['status', 'action'])
->make(true);
}
return response()->json(['error' => 'Unauthorized'], 401);
}
public function contentRecap(Request $request){
if ($request->ajax()) {

View File

@ -37,7 +37,7 @@ public function store(CooperationRequest $request){
$createdCooperation->media()->attach($validatedData['media_ids']);
if ($createdCooperation->media()->count() > 0) {
return redirect()->back()->with('success-status', 'Berhasil menambahkan kerjasama.');
return redirect()->route('dashboard.cooperations.index')->with('success-status', 'Berhasil menambahkan kerjasama.');
} else {
return redirect()->back()->with('failed-status', 'Gagal menambahkan kerjasama');
}
@ -148,12 +148,12 @@ public function mediaProposalRejectAction(Request $request, $id, $proposalId){
$proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId));
$acceptedProposal = $proposal->update([
$rejectedProposal = $proposal->update([
'status' => '2',
'rejection_reason' => $validatedData['rejection_reason']
]);
if ($acceptedProposal) {
if ($rejectedProposal) {
return redirect()->back()->with('success-status', 'Berhasil menolak pengajuan kerjasama.');
} else {
return redirect()->back()->with('failed-status', 'Gagal menolak pengajuan kerjasama');
@ -161,7 +161,7 @@ public function mediaProposalRejectAction(Request $request, $id, $proposalId){
}
public function process($id, $process){
public function process($id, $process, $paramMediaId = null){
$mediaCooperation = Cooperation::with(['media', 'mediaOrder.media'])->findOrFail(decrypt_id($id));
$data = [
'title' => 'Detail Kerjasama',
@ -175,12 +175,13 @@ public function process($id, $process){
if(is_role(['3'])){
$mediaId = Auth::user()->company->media->id;
$mediaOrder = $mediaCooperation->mediaOrder->media->where('id', $mediaId)->first();
if($mediaOrder){
$data['mediaOrderPivot'] = $mediaOrder->pivot;
}else{
return redirect()->back()->with('warning-status', 'Mohon maaf, admin telah menerbitkan media order!');
$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);
@ -191,11 +192,58 @@ public function process($id, $process){
$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);
}
}
}
}

View File

@ -36,7 +36,7 @@ public function store(OrderRequest $request, $id){
$createdOrder->media()->attach($validatedData['media_ids']);
if ($createdOrder->media()->count() > 0) {
return redirect()->back()->with('success-status', 'Berhasil membuat media order.');
return redirect()->route('dashboard.cooperations.process', ['id' => encrypt_id($cooperation->id), 'process' => 'media-order'])->with('success-status', 'Berhasil membuat media order.');
} else {
return redirect()->back()->with('failed-status', 'Gagal membuat media order');
}

View File

@ -0,0 +1,149 @@
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Requests\ReportRequest;
use App\Models\Report;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ReportController extends Controller
{
public function create($id){
return view('dashboard.reports.create', [
'title' => 'Buat Laporan',
'mediaOrderId' => $id
]);
}
public function store(ReportRequest $request, $id){
$validatedData = $request->validated();
$validatedData['media_id'] = Auth::user()->company->media->id;
$validatedData['order_id'] = decrypt_id($id);
$validatedData['proof'] = store_file($validatedData['proof'], '/uploads/reports', 'public')['randomFileName'];
$createdReport = Report::create($validatedData);
if($createdReport){
return redirect()->route('dashboard.cooperations.process', ['id' => $id, 'process' => 'reports'])->with('success-status', 'Berhasil menambahkan laporan.');
}else{
return redirect()->back()->with('failed-status', 'Gagal menambahkan laporan.');
}
}
public function edit($mediaOrderId, $id){
$report = Report::findOrFail(decrypt_id($id));
return view('dashboard.reports.edit', [
'title' => 'Buat Laporan',
'report' => $report,
'mediaOrderId' => $mediaOrderId
]);
}
public function update(ReportRequest $request, $mediaOrderId, $id){
$validatedData = $request->validated();
$validatedData['media_id'] = Auth::user()->company->media->id;
$validatedData['order_id'] = decrypt_id($mediaOrderId);
$validatedData['status'] = '0';
$report = Report::findOrFail(decrypt_id($id));
if($request->hasFile('image')){
$validatedData['proof'] = store_file($validatedData['proof'], '/uploads/reports', 'public')['randomFileName'];
delete_file('app/public/uploads/reports/'.$report->proof);
}else{
$validatedData['proof'] = $report->proof;
}
$updatedReport = $report->update($validatedData);
if($updatedReport){
return redirect()->back()->with('success-status', 'Berhasil mengubah laporan.');
}else{
return redirect()->back()->with('failed-status', 'Gagal mengubah laporan.');
}
}
public function show($mediaOrderId, $id){
$report = Report::findOrFail(decrypt_id($id));
return view('dashboard.reports.show', [
'title' => 'Detail Laporan',
'report' => $report,
'mediaOrderId' => $mediaOrderId
]);
}
public function accept($id){
$report = Report::findOrFail(decrypt_id($id));
$acceptedReport = $report->update([
'status' => '1'
]);
if ($acceptedReport) {
return redirect()->back()->with('success-status', 'Berhasil menyetujui laporan bukti tayang.');
} else {
return redirect()->back()->with('failed-status', 'Gagal menyetujui laporan bukti tayang');
}
}
public function reject($mediaOrderId, $id){
$report = Report::findOrFail(decrypt_id($id));
return view('dashboard.reports.reject', [
'title' => 'Tolak Laporan',
'report' => $report,
'mediaOrderId' => $mediaOrderId
]);
}
public function rejectAction(Request $request, $mediaOrderId, $id){
$validatedData = $request->validate([
'rejection_reason' => ['required'],
], [
'rejection_reason.required' => 'Alasan penolakan wajib diisi.',
]);
$report = Report::findOrFail(decrypt_id($id));
$rejectedReport = $report->update([
'status' => '2',
'rejection_reason' => $validatedData['rejection_reason']
]);
if ($rejectedReport) {
return redirect()->back()->with('success-status', 'Berhasil menolak laporan bukti tayang.');
} else {
return redirect()->back()->with('failed-status', 'Gagal menolak laporan bukti tayang');
}
}
public function destroy($id){
try {
$report = Report::findOrFail(decrypt_id($id));
delete_file('app/public/uploads/reports/'.$report->proof);
$report->forceDelete();
return response()->json(['message' => 'Berhasil menghapus laporan bukti tayang.']);
} catch (\Exception $e) {
return response()->json(['message' => 'Gagal menghapus laporan bukti tayang.'], 500);
}
}
public function checkLink(Request $request)
{
$linkExists = Report::where('link', $request->link)
->where('media_id', Auth::user()->company->media->id)
->exists();
return response()->json([
'exists' => $linkExists
]);
}
}

View File

@ -28,7 +28,7 @@ public function rules(): array
'media_ids' => ['required', 'array'],
'media_ids.*' => ['required', 'exists:media,id'],
'image' => ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'],
'amount_report' => ['required', 'numeric', 'min:1', 'max:100'],
'required_reports' => ['required', 'numeric', 'min:1', 'max:100'],
'task_description' => ['required'],
];
}

View File

@ -0,0 +1,56 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class ReportRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return Auth::check() && is_role(['3']);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
$rules = [
'title' => ['required'],
'publication_date' => ['required', 'date'],
'link' => ['required', 'url'],
'description' => ['nullable'],
];
if($this->isMethod('post')){
$rules['proof'] = ['required', 'image', 'mimes:png,jpg,jpeg', 'max:2048'];
}else{
$rules['proof'] = ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'];
}
return $rules;
}
public function messages(): array
{
return [
'title.required' => 'Judul wajib diisi.',
'publication_date.required' => 'Tanggal publikasi wajib diisi.',
'publication_date.date' => 'Tanggal publikasi harus berupa format tanggal yang valid.',
'link.required' => 'Link wajib diisi.',
'link.url' => 'Format link tidak valid.',
'proof.required' => 'Bukti tayang wajib diunggah.',
'proof.image' => 'Bukti tayang harus berupa gambar.',
'proof.mimes' => 'Format gambar harus PNG, JPG, atau JPEG.',
'proof.max' => 'Ukuran gambar tidak boleh lebih dari 2MB.',
];
}
}

View File

@ -57,4 +57,8 @@ public function orders()
->withPivot(['status', 'rejection_reason'])
->withTimestamps();
}
public function reports(){
return $this->hasMany(Report::class, 'media_id', 'id');
}
}

View File

@ -16,7 +16,7 @@ class Order extends Model
'end_date',
'image',
'task_description',
'amount_report',
'required_reports',
'cooperation_id',
'enhancer_id',
];
@ -32,4 +32,8 @@ public function media()
public function cooperation(){
return $this->belongsTo(Cooperation::class, 'cooperation_id', 'id')->withTrashed();
}
public function reports(){
return $this->hasMany(Report::class, 'order_id', 'id');
}
}

33
app/Models/Report.php Normal file
View File

@ -0,0 +1,33 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Report extends Model
{
use SoftDeletes;
protected $table = 'reports';
protected $fillable = [
'title',
'publication_date',
'link',
'proof',
'description',
'status',
'rejection_reason',
'media_id',
'order_id',
];
public function order(){
return $this->belongsTo(Order::class, 'order_id', 'id');
}
public function media(){
return $this->belongsTo(Media::class, 'media_id', 'id');
}
}

View File

@ -17,7 +17,7 @@ public function up(): void
$table->date('end_date');
$table->string('image')->nullable();
$table->text('task_description');
$table->integer('amount_report')->default(0);
$table->integer('required_reports')->default(0);
$table->unsignedBigInteger('cooperation_id');
$table->unsignedBigInteger('enhancer_id');
$table->foreign('cooperation_id')->references('id')->on('cooperations');

View File

@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('reports', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->date('publication_date');
$table->string('link');
$table->string('proof');
$table->text('description')->nullable();
$table->enum('status', ['0', '1', '2', '3'])->default('0');
$table->text('rejection_reason')->nullable();
$table->unsignedBigInteger('media_id');
$table->unsignedBigInteger('order_id');
$table->foreign('media_id')->references('id')->on('media');
$table->foreign('order_id')->references('id')->on('orders');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('reports');
}
};

View File

@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ReportSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@ -78,4 +78,91 @@ $(document).ready(function() {
});
});
$(document).ready(function() {
// Setup CSRF token untuk semua AJAX request
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
let typingTimer;
let delay = 500;
$('#reportLink').on('keyup', function() {
clearTimeout(typingTimer);
let inputField = $(this);
let linkValue = inputField.val();
if (linkValue.length > 0) {
typingTimer = setTimeout(function() {
$.ajax({
url: '/dashboard/reports/check-link', // Sesuaikan dengan route yang benar
method: 'POST',
data: { link: linkValue }, // CSRF sudah otomatis ditambahkan
success: function(response) {
console.log('Response:', response);
if (response.exists) {
$('#linkFeedback')
.removeClass('d-none text-success')
.addClass('text-danger')
.text('Link tersebut sudah ada di database!');
inputField.addClass('is-invalid').removeClass('is-valid');
} else {
$('#linkFeedback')
.removeClass('d-none text-danger')
.addClass('text-success')
.text('Link tidak ada di database.');
inputField.addClass('is-valid').removeClass('is-invalid');
}
},
error: function(xhr, status, error) {
console.error('AJAX Error:', error); // Debugging
}
});
}, delay);
} else {
$('#linkFeedback').addClass('d-none');
inputField.removeClass('is-invalid is-valid');
}
});
});
document.querySelector('.image-preview').addEventListener('change', function(event) {
var reader = new FileReader();
reader.onload = function(e) {
// Set the image source to the preview
document.getElementById('imagePreview').src = e.target.result;
// Show the modal
$('#imagePreviewModal').modal('show');
};
reader.readAsDataURL(event.target.files[0]);
});
// Mendapatkan file PDF dari input
document.querySelector('.pdf-preview').addEventListener('change', function(event) {
var file = event.target.files[0];
if (file && file.type === 'application/pdf') {
var reader = new FileReader();
reader.onload = function(e) {
var pdfDataUrl = e.target.result;
var iframe = document.getElementById('pdfPreviewIframe');
iframe.src = pdfDataUrl; // Menampilkan file PDF di iframe
// Menampilkan modal
var myModal = new bootstrap.Modal(document.getElementById('pdfPreviewModal'), {
keyboard: true
});
myModal.show();
};
reader.readAsDataURL(file); // Membaca file PDF sebagai data URL
} else {
alert('Please upload a valid PDF file.');
}
});

View File

@ -288,8 +288,11 @@
<div class="form-group">
<label class="form-label" for="attachment">Lampiran Pengajuan<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="file" data-msg="Wajib Di isi" class="form-control required" id="attachment" name="attachment" required accept="application/pdf">
<input type="file" data-msg="Wajib Di isi" class="form-control pdf-preview @error('attachment') border-danger @enderror" id="attachment" name="attachment" required accept="application/pdf">
</div>
@error('attachment')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div><!-- .col -->
<div class="col-md-6">

View File

@ -48,7 +48,6 @@
<th>Nama Kegiatan</th>
<th>Tanggal Awal Pengajuan</th>
<th>Tanggal Akhir Pengajuan</th>
<th>Dibuat Pada</th>
<th>Status</th>
<th style="width: 10% !important;"></th>
</tr>

View File

@ -71,7 +71,7 @@
<div class="form-group">
<label class="form-label" for="banner">Banner</label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('banner') border-danger @enderror" id="banner" name="banner" placeholder="Masukan file banner" value="{{old('banner')}}" accept="image/*">
<input type="file" class="form-control @error('banner') border-danger @enderror image-preview" id="banner" name="banner" placeholder="Masukan file banner" value="{{old('banner')}}" accept="image/*">
</div>
@error('banner')
<span class="validation-error">{{$message}}</span>
@ -82,7 +82,7 @@
<div class="form-group">
<label class="form-label" for="offer_file_template">Template Pengajuan<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('offer_file_template') border-danger @enderror" id="offer_file_template" name="offer_file_template" placeholder="Masukan template penawaran" value="{{old('offer_file_template')}}" accept="application/pdf">
<input type="file" class="form-control @error('offer_file_template') border-danger @enderror pdf-preview" id="offer_file_template" name="offer_file_template" placeholder="Masukan template penawaran" value="{{old('offer_file_template')}}" accept="application/pdf">
</div>
@error('offer_file_template')
<span class="validation-error">{{$message}}</span>

View File

@ -72,7 +72,7 @@
<div class="form-group">
<label class="form-label" for="banner">Banner</label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('banner') border-danger @enderror" id="banner" name="banner" placeholder="Masukan file banner" accept="image/*">
<input type="file" class="form-control @error('banner') border-danger @enderror image-preview" id="banner" name="banner" placeholder="Masukan file banner" accept="image/*">
</div>
@error('banner')
<span class="validation-error">{{$message}}</span>
@ -83,7 +83,7 @@
<div class="form-group">
<label class="form-label" for="offer_file_template">Template PDF</label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('offer_file_template') border-danger @enderror" id="offer_file_template" name="offer_file_template" placeholder="Masukan template penawaran" accept="application/pdf">
<input type="file" class="form-control @error('offer_file_template') border-danger @enderror pdf-preview" id="offer_file_template" name="offer_file_template" placeholder="Masukan template penawaran" accept="application/pdf">
</div>
@error('offer_file_template')
<span class="validation-error">{{$message}}</span>

View File

@ -49,6 +49,12 @@
<span class="profile-ud-value">{{idn_date($mediaOrder->end_date, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Jumlah Laporan Setiap Media</span>
<span class="profile-ud-value">{{$mediaOrder->required_reports}} Laporan Bukti Tayang</span>
</div>
</div>
@if (is_role(['3']))
<div class="profile-ud-item">
<div class="profile-ud wider">

View File

@ -0,0 +1,52 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'cooperations'])
@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">
<div class="card-inner">
@include('dashboard.media-cooperations.processes.tab')
<div class="tab-content">
<div class="tab-pane active" id="cooperation">
<div class="card-content">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card soft-grey-backgorund">
<li class="nav-item">
<a class="nav-link text-primary" href="#"><em class="icon ni ni-info"></em><span>Data Laporan Bukti Tayang Media</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="table-responsive">
<table class="table table-striped table-bordered nowrap" id="adminMediaReportsTable" border="1">
<thead>
<tr>
<th style="width: 10% !important;">No</th>
<th>Nama Media</th>
<th>Nama Perusahaan</th>
<th>Email</th>
<th>Laporan</th>
<th style="width: 10% !important;"></th>
</tr>
</thead>
</table>
</div>
</div>
</div><!-- .card-content -->
<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>
</div><!-- .nk-block -->
</div>
</div>
</div>
</div><!-- .card-preview -->
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false, 'datatable' => 'admin_media_report'])

View File

@ -0,0 +1,71 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'cooperations'])
@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">
<div class="card-inner">
@include('dashboard.media-cooperations.processes.tab')
<div class="tab-content">
<div class="tab-pane active" id="cooperation">
<div class="card-content">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card soft-grey-backgorund">
<li class="nav-item">
<a class="nav-link text-primary" href="#"><em class="icon ni ni-info"></em><span>Data Laporan Bukti Tayang
@if (is_role(['1']))
Media <span style="text-decoration: underline;">{{$reporterMedia->name}}</span>
@else
<span style="color: grey">
({{$reportCount}}/{{$mediaOrder->required_reports}})
</span>
@endif
</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="table-responsive">
<table class="table table-striped table-bordered nowrap" id="mediaReportsTable" border="1">
<thead>
<tr>
<th style="width: 10% !important;">No</th>
<th>Judul</th>
<th>Tanggal</th>
<th>Status</th>
<th style="width: 10% !important;"></th>
</tr>
</thead>
</table>
</div>
</div>
</div><!-- .card-content -->
<hr>
@if (is_role(['3']))
<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>
@if (!$isReportsCompleted)
<a href="{{route('dashboard.reports.create', ['id' => encrypt_id($mediaOrder->id)])}}" class="btn btn-primary"><span>Buat Laporan</span></a>
@endif
@if ($isAllReportsAccepted)
<a href="{{route('dashboard.reports.create', ['id' => encrypt_id($mediaOrder->id)])}}" class="btn btn-primary"><span>Selesaikan</span></a>
@endif
</div><!-- .nk-block -->
@else
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'reports'])}}" class="btn btn-white btn-dim btn-outline-light"><span>Kembali</span></a>
@endif
</div>
</div>
</div>
</div><!-- .card-preview -->
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false, 'datatable' => 'media_report'])

View File

@ -12,7 +12,7 @@
</li>
@if (is_role(['1']))
<li class="nav-item">
<a class="nav-link {{$process === 'report' ? 'active' : ''}}" href="{{ $mediaOrder ? route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'reports']) : 'javascript:void(0)'}}">
<a class="nav-link {{$process === 'reports' ? 'active' : ''}}" href="{{ $mediaOrder ? route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'reports']) : 'javascript:void(0)'}}">
@if (!$mediaOrder)
<em class="icon ni ni-lock" style="margin-right: 0.3rem;"></em>
@endif
@ -27,15 +27,19 @@
</li>
@else
<li class="nav-item">
<a class="nav-link {{$process === 'report' ? 'active' : ''}}" href="{{ $mediaOrder && $mediaOrderPivot->status === '1' ? route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'reports']) : 'javascript:void(0)'}}">
@if ($mediaOrder && $mediaOrderPivot->status !== '1')
<a class="nav-link {{$process === 'reports' ? 'active' : ''}}" href="{{ $mediaOrder && isset($mediaOrderPivot) && $mediaOrderPivot->status === '1' ? route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'reports']) : 'javascript:void(0)'}}">
@if (!isset($mediaOrder))
<em class="icon ni ni-lock" style="margin-right: 0.3rem;"></em>
@elseif(isset($mediaOrderPivot) && $mediaOrderPivot->status !== '1')
<em class="icon ni ni-lock" style="margin-right: 0.3rem;"></em>
@endif
Laporan</a>
</li>
<li class="nav-item">
<a class="nav-link {{$process === 'finish' ? 'active' : ''}}" href="{{ $mediaOrder && $mediaOrderPivot->status === '1' ? route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'finish']) : 'javascript:void(0)'}}">
@if ($mediaOrder && $mediaOrderPivot->status !== '1')
<a class="nav-link {{$process === 'finish' ? 'active' : ''}}" href="{{ $mediaOrder && isset($mediaOrderPivot) && $mediaOrderPivot->status === '1' && $isHaveReports && $isAllReportsAccepted ? route('dashboard.cooperations.process', ['id' => encrypt_id($mediaCooperation->id), 'process' => 'finish']) : 'javascript:void(0)'}}">
@if (!isset($mediaOrder))
<em class="icon ni ni-lock" style="margin-right: 0.3rem;"></em>
@elseif (!$isHaveReports || !$isAllReportsAccepted)
<em class="icon ni ni-lock" style="margin-right: 0.3rem;"></em>
@endif
Selesai</a>

View File

@ -70,7 +70,7 @@
<div class="form-group">
<label class="form-label" for="image">Gambar</label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('image') border-danger @enderror" id="image" name="image" placeholder="Masukan file image" value="{{old('image')}}" accept="image/*">
<input type="file" class="form-control @error('image') border-danger @enderror image-preview" id="image" name="image" placeholder="Masukan file image" value="{{old('image')}}" accept="image/*">
</div>
@error('image')
<span class="validation-error">{{$message}}</span>
@ -79,11 +79,11 @@
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="amount_report">Jumlah Laporan<span class="required-input">*</span></label>
<label class="form-label" for="required_reports">Jumlah Laporan<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="number" class="form-control @error('amount_report') border-danger @enderror" id="amount_report" name="amount_report" placeholder="Masukan jumlah laporan" value="{{old('amount_report')}}" min="1" max="100">
<input type="number" class="form-control @error('required_reports') border-danger @enderror" id="required_reports" name="required_reports" placeholder="Masukan jumlah laporan" value="{{old('required_reports')}}" min="1" max="100">
</div>
@error('amount_report')
@error('required_reports')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
@ -92,7 +92,7 @@
<div class="form-group">
<label class="form-label" for="phone-no-1">Deskripsi Tugas<span class="required-input">*</span></label>
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="task_description">{!!old('task_description')!!}</textarea>
<textarea class="tinymce-basic form-control" name="task_description">{!!$cooperation->description!!}</textarea>
</div>
</div>
</div>

View File

@ -71,7 +71,7 @@
<div class="form-group">
<label class="form-label" for="image">Gambar</label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('image') border-danger @enderror" id="image" name="image" placeholder="Masukan file image" value="{{old('image')}}" accept="image/*">
<input type="file" class="form-control @error('image') border-danger @enderror image-preview" id="image" name="image" placeholder="Masukan file image" value="{{old('image')}}" accept="image/*">
</div>
@error('image')
<span class="validation-error">{{$message}}</span>
@ -80,11 +80,11 @@
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="amount_report">Jumlah Laporan<span class="required-input">*</span></label>
<label class="form-label" for="required_reports">Jumlah Laporan<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="number" class="form-control @error('amount_report') border-danger @enderror" id="amount_report" name="amount_report" placeholder="Masukan jumlah laporan" value="{{$mediaOrder->amount_report}}" min="1" max="100">
<input type="number" class="form-control @error('required_reports') border-danger @enderror" id="required_reports" name="required_reports" placeholder="Masukan jumlah laporan" value="{{$mediaOrder->required_reports}}" min="1" max="100">
</div>
@error('amount_report')
@error('required_reports')
<span class="validation-error">{{$message}}</span>
@enderror
</div>

View File

@ -0,0 +1,89 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'cooperations'])
@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">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
</div>
<form action="{{route('dashboard.reports.store', ['id' => $mediaOrderId])}}" method="post" id="myForm" enctype="multipart/form-data">
@csrf
<div class="row g-4">
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="title">Judul Konten<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('title') border-danger @enderror" id="title" name="title" placeholder="Masukan judul konten" value="{{old('title')}}">
</div>
@error('title')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="publication_date">Tanggal Publikasi<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="date" class="form-control @error('publication_date') border-danger @enderror" id="publication_date" name="publication_date" placeholder="Masukan tanggal selesai" value="{{old('publication_date')}}">
</div>
@error('publication_date')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="link">Link<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('link') border-danger @enderror" id="reportLink" name="link" placeholder="Masukan nama kegiatan" value="{{old('link')}}">
<small id="linkFeedback" class="d-none"></small>
</div>
@error('link')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="proof">Gambar<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('proof') border-danger @enderror" id="proof" name="proof" placeholder="Masukan file proof" value="{{old('proof')}}" accept="image/*">
</div>
@error('proof')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="form-label" for="phone-no-1">Deskripsi<span class="required-input">*</span></label>
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="description">{!!old('description')!!}</textarea>
</div>
</div>
</div>
<div class="col-12">
<hr>
<div class="form-group d-flex justify-content-end">
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports'])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<button type="button" class="btn btn-md btn-primary" id="submitButton">Kirim</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => true])

View File

@ -0,0 +1,89 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'cooperations'])
@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">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
</div>
<form action="{{route('dashboard.reports.update', ['mediaOrderId' => $mediaOrderId, 'id' => encrypt_id($report->id)])}}" method="post" id="myForm" enctype="multipart/form-data">
@csrf
@method('put')
<div class="row g-4">
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="title">Judul Konten<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('title') border-danger @enderror" id="title" name="title" placeholder="Masukan judul konten" value="{{$report->title}}">
</div>
@error('title')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="publication_date">Tanggal Publikasi<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="date" class="form-control @error('publication_date') border-danger @enderror" id="publication_date" name="publication_date" placeholder="Masukan tanggal selesai" value="{{$report->publication_date}}">
</div>
@error('publication_date')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="link">Link<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('link') border-danger @enderror" id="link" name="link" placeholder="Masukan nama kegiatan" value="{{$report->link}}">
</div>
@error('link')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label class="form-label" for="proof">Gambar</label>
<div class="form-control-wrap">
<input type="file" class="form-control @error('proof') border-danger @enderror" id="proof" name="proof" placeholder="Masukan file proof" value="{{old('proof')}}" accept="image/*">
</div>
@error('proof')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="form-label" for="phone-no-1">Deskripsi<span class="required-input">*</span></label>
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="description">{!!$report->description!!}</textarea>
</div>
</div>
</div>
<div class="col-12">
<hr>
<div class="form-group d-flex justify-content-end">
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports'])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<button type="button" class="btn btn-md btn-primary" id="submitButton">Simpan</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => true])

View File

@ -0,0 +1,141 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'media_monitorings'])
@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">
<div class="card-aside-wrap">
<div class="card-content">
<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-info"></em><span>Detail Laporan Bukti Tayang</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="nk-block">
{{-- <div class="nk-block-head">
<h5 class="title">Personal Information</h5>
<p>Basic info, like your name and address, that you use on Nio Platform.</p>
</div> --}}
<div class="profile-ud-list">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Judul Konten</span>
<span class="profile-ud-value">{{$report->title}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Tanggal Publikasi</span>
<span class="profile-ud-value">{{idn_date($report->publication_date, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Link</span>
<span class="profile-ud-value">
@if ($report->link != '' || $mediaMonitoring != null)
<a href="{{$report->link}}" target="__blank">{{$report->link}}</a>
@else
-
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
<span class="profile-ud-value">
@if ($report->status === '0')
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@elseif($report->status === '1')
<span class="profile-ud-value"><span class="badge bg-success">Menerima</span></span>
@elseif($report->status === '2')
<span class="profile-ud-value"><span class="badge bg-danger">Menolak</span></span>
@else
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endif
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label">Deskripsi</span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!!$report->description!!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label">Gambar</span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
@if (is_file_exists('uploads/reports/'.$report->proof))
<img src="{{asset('storage/uploads/reports/'. $report->proof)}}" alt="">
@else
Tidak ada gambar
@endif
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
<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-warning" href="#"><em class="icon ni ni-na"></em><span>Data Penolakan</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
{{-- {{dd($mediaCooperationPivot->status != '0')}} --}}
<form action="{{route('dashboard.reports.reject.action', ['mediaOrderId' => $mediaOrderId, 'id' => encrypt_id($report->id)])}}" method="post">
@csrf
<div class="form-group">
<label class="form-label" for="rejection_reason">Alasan Menolak @if($report->status === '0')<span class="required-input">*</span> @endif </label>
@if ($report->status === '0')
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="rejection_reason" id="rejection_reason" >{!!old('rejection_reason')!!}</textarea>
</div>
@elseif ($report->status === '2')
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!!$report->rejection_reason!!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
@endif
</div>
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports', 'mediaId' => encrypt_id($report->media_id)])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@if ($report->status === '0')
<button type="submit" class="btn btn-primary">Kirim</button>
@endif
</div><!-- .nk-block -->
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -0,0 +1,147 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'media_monitorings'])
@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">
<div class="card-aside-wrap">
<div class="card-content">
<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-info"></em><span>Detail Laporan Bukti Tayang</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="nk-block">
{{-- <div class="nk-block-head">
<h5 class="title">Personal Information</h5>
<p>Basic info, like your name and address, that you use on Nio Platform.</p>
</div> --}}
<div class="profile-ud-list">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Judul Konten</span>
<span class="profile-ud-value">{{$report->title}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Tanggal Publikasi</span>
<span class="profile-ud-value">{{idn_date($report->publication_date, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Link</span>
<span class="profile-ud-value">
@if ($report->link != '' || $mediaMonitoring != null)
<a href="{{$report->link}}" target="__blank">{{$report->link}}</a>
@else
-
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
<span class="profile-ud-value">
@if ($report->status === '0')
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@elseif($report->status === '1')
<span class="profile-ud-value"><span class="badge bg-success">Menerima</span></span>
@elseif($report->status === '2')
<span class="profile-ud-value"><span class="badge bg-danger">Menolak</span></span>
@else
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endif
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label">Deskripsi</span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!!$report->description!!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label">Gambar</span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
@if (is_file_exists('uploads/reports/'.$report->proof))
<img src="{{asset('storage/uploads/reports/'. $report->proof)}}" alt="">
@else
Tidak ada gambar
@endif
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
@if ($report->status !== '2')
<div class="nk-block d-flex justify-content-end">
@if (is_role(['3']))
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports'])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@else
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports', 'mediaId' => encrypt_id($report->media_id)])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@endif
</div><!-- .nk-block -->
@endif
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
@if ($report->status === '2')
<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-warning" href="#"><em class="icon ni ni-na"></em><span>Data Penolakan</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
{{-- {{dd($mediaCooperationPivot->status != '0')}} --}}
<form action="#" method="post">
@csrf
<div class="form-group">
<label class="form-label" for="rejection_reason">Alasan Menolak </label>
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!!$report->rejection_reason!!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div>
<hr>
<div class="nk-block d-flex justify-content-end">
@if (is_role(['3']))
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports'])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@else
<a href="{{route('dashboard.cooperations.process', ['id' => $mediaOrderId, 'process' => 'reports', 'mediaId' => encrypt_id($report->media_id)])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@endif
</div><!-- .nk-block -->
</form>
</div>
</div>
@endif
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -429,7 +429,6 @@
{ data: 'name', name: 'name' },
{ data: 'start_date', name: 'start_date' },
{ data: 'end_date', name: 'end_date' },
{ data: 'posted_at', name: 'posted_at' },
{ data: 'status', name: 'status' },
{ data: 'action', name: 'action', orderable: false, searchable: false },
{ data: 'created_at', name: 'created_at', visible: false },
@ -537,6 +536,61 @@
</script>
@endif
@if ($datatable === 'admin_media_report')
<script>
$(document).ready(function() {
$('#adminMediaReportsTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route('dashboard.reports.admin.media.data', ["id" => encrypt_id($mediaOrder->id)]) }}',
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'media_name', name: 'media_name' },
{ data: 'company_name', name: 'company_name' },
{ data: 'email', name: 'email' },
{ data: 'reuired_reports', name: 'reuired_reports' },
{ data: 'action', name: 'action' },
{ data: 'created_at', name: 'created_at', visible: false },
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
],
language: datatableLanguage,
autoWidth: false,
order: [[6, 'desc']],
pagingType: "simple",
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']],
scrollX: true
});
});
</script>
@endif
@if ($datatable === 'media_report')
<script>
$(document).ready(function() {
$('#mediaReportsTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route('dashboard.reports.media.data', ["mediaOrderId" => encrypt_id($mediaOrder->id), "mediaId" => encrypt_id($reporterMediaId)]) }}',
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'title', name: 'title' },
{ data: 'date', name: 'date' },
{ data: 'status', name: 'status' },
{ data: 'action', name: 'action' },
{ data: 'created_at', name: 'created_at', visible: false },
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
],
language: datatableLanguage,
autoWidth: false,
order: [[4, 'desc']],
pagingType: "simple",
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']],
scrollX: true
});
});
</script>
@endif
@if ($datatable === 'content_recap')
<script>
$(document).ready(function() {

View File

@ -44,6 +44,42 @@
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="imagePreviewModal" tabindex="-1" aria-labelledby="imagePreviewModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="imagePreviewModalLabel">Preview Image</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<img id="imagePreview" src="" alt="Image Preview" class="img-fluid">
</div>
</div>
</div>
</div>
<!-- Modal Preview PDF -->
<div class="modal fade" id="pdfPreviewModal" tabindex="-1" aria-labelledby="pdfPreviewModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="pdfPreviewModalLabel">Preview PDF</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- PDF Embed -->
<iframe id="pdfPreviewIframe" src="" width="100%" height="500px"></iframe>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
<!-- footer @e -->
</div>

View File

@ -18,6 +18,7 @@
use App\Http\Controllers\Dashboard\MediaOrderController;
use App\Http\Controllers\Dashboard\NewsController;
use App\Http\Controllers\Dashboard\OverviewController;
use App\Http\Controllers\Dashboard\ReportController;
use App\Http\Controllers\Dashboard\RoleController;
use App\Http\Controllers\Dashboard\SettingController;
use App\Http\Controllers\Dashboard\SubClassificationController;
@ -268,7 +269,7 @@
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
Route::get('/{id}/process/{process}', 'process')->name('process');
Route::get('/{id}/process/{process}/{mediaId?}', 'process')->name('process');
});
Route::get('/data', [DatatableController::class, 'cooperation'])->name('data');
@ -327,6 +328,33 @@
Route::get('/media-data/{id}', [DatatableController::class, 'orderMedia'])->name('media.data');
});
Route::prefix('reports')->name('reports.')->group(function(){
Route::controller(ReportController::class)->group(function(){
Route::get('/', 'index')->name('index');
Route::get('/{mediaOrderId}/show/{id}', 'show')->name('show');
Route::middleware('role:3')->group(function(){
Route::get('/create/{id}', 'create')->name('create');
Route::post('/check-link', 'checkLink')->name('check.link');
Route::post('/{id}', 'store')->name('store');
Route::get('/{mediaOrderId}/edit/{id}', 'edit')->name('edit');
Route::put('/{mediaOrderId}/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::middleware('role:1')->group(function(){
Route::post('/{id}/accept', 'accept')->name('accept');
Route::get('/{mediaOrderId}/reject/{id}', 'reject')->name('reject');
Route::post('/{mediaOrderId}/reject/{id}', 'rejectAction')->name('reject.action');
});
});
Route::get('/admin-media-data/{id}', [DatatableController::class, 'adminMediaReport'])->name('admin.media.data');
Route::get('/media-data/{mediaOrderId}/{mediaId}', [DatatableController::class, 'mediaReport'])->name('media.data');
});
Route::middleware('role:1,4')->group(function(){
Route::prefix('content-recaps')->name('content.recaps.')->group(function(){
Route::controller(ContentRecapController::class)->group(function(){