Files
sibedas/app/Http/Controllers/Api/RequestAssignmentController.php
arifal hidayat 3ff3dc8f17 fix verified
2025-08-15 03:53:42 +07:00

240 lines
9.2 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Exports\DistrictPaymentRecapExport;
use App\Http\Controllers\Controller;
use App\Http\Resources\RequestAssignmentResouce;
use App\Models\PbgTask;
use App\Models\PbgTaskGoogleSheet;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\DB;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Facades\Excel;
use App\Enums\PbgTaskStatus;
class RequestAssignmentController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$query = PbgTask::with([
'attachments' => function ($q) {
$q->whereIn('pbg_type', ['berita_acara', 'bukti_bayar']);
},
'pbg_task_retributions'
])->orderBy('id', 'desc');
if ($request->has('filter') && !empty($request->get('filter'))) {
$filter = strtolower(trim($request->get('filter')));
// Log filter for debugging
Log::info('RequestAssignmentController filter applied', ['filter' => $filter, 'original' => $request->get('filter')]);
switch ($filter) {
case 'non-business':
$query->where(function ($q) {
$q->where(function ($q2) {
$q2->where(function ($q3) {
$q3->whereRaw("LOWER(TRIM(function_type)) NOT LIKE ?", ['%fungsi usaha%'])
->whereRaw("LOWER(TRIM(function_type)) NOT LIKE ?", ['%sebagai tempat usaha%']);
})
->orWhereNull('function_type');
})
->whereIn("status", PbgTaskStatus::getNonVerified());
});
break;
case 'business':
$query->where(function ($q) {
$q->where(function ($q2) {
$q2->whereRaw("LOWER(TRIM(function_type)) LIKE ?", ['%fungsi usaha%'])
->orWhereRaw("LOWER(TRIM(function_type)) LIKE ?", ['%sebagai tempat usaha%']);
})
->whereIn("status", PbgTaskStatus::getNonVerified());
});
break;
case 'verified':
$query->whereIn("status", PbgTaskStatus::getVerified());
break;
case 'non-verified':
$query->whereIn("status", PbgTaskStatus::getNonVerified());
break;
case 'potention':
$potentionStatuses = PbgTaskStatus::getPotention();
$rejectedStatuses = PbgTaskStatus::getRejected();
$nonVerifiedStatuses = PbgTaskStatus::getNonVerified();
$query->where(function($q) use ($potentionStatuses, $rejectedStatuses, $nonVerifiedStatuses) {
$q->where(function($q1) use ($potentionStatuses, $rejectedStatuses, $nonVerifiedStatuses) {
// Verified potention (main logic)
$q1->whereIn("status", $potentionStatuses)
->whereNotIn("status", $rejectedStatuses)
->whereNotIn("status", $nonVerifiedStatuses);
})
->orWhere(function($q2) use ($nonVerifiedStatuses) {
// Add non-verified WITH retributions (business logic exception)
$q2->whereIn("status", $nonVerifiedStatuses)
->whereHas('pbg_task_retributions');
});
});
Log::info('Potention filter applied', [
'status_list' => $potentionStatuses,
'excluded_rejected' => $rejectedStatuses,
'excluded_non_verified_without_retributions' => $nonVerifiedStatuses,
'included_non_verified_with_retributions' => true,
'count_before_filter' => PbgTask::count(),
'count_after_filter' => $query->count()
]);
break;
case 'issuance-realization-pbg':
$query->whereIn("status", PbgTaskStatus::getIssuanceRealizationPbg());
break;
case 'process-in-technical-office':
$query->whereIn("status", PbgTaskStatus::getProcessInTechnicalOffice());
break;
case 'waiting-click-dpmptsp':
$query->whereIn("status", PbgTaskStatus::getWaitingClickDpmptsp());
break;
default:
// Log unrecognized filter for debugging
Log::warning('Unrecognized filter value', ['filter' => $filter, 'original' => $request->get('filter')]);
break;
}
}
if ($request->has('search') && !empty($request->get("search"))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('name', 'LIKE', "%$search%")
->orWhere('registration_number', 'LIKE', "%$search%")
->orWhere('document_number', 'LIKE', "%$search%");
});
}
// Log final query count for debugging
$finalCount = $query->count();
Log::info('RequestAssignmentController final result', [
'filter' => $request->get('filter'),
'search' => $request->get('search'),
'total_count' => $finalCount,
'request_url' => $request->fullUrl(),
'all_params' => $request->all()
]);
// Additional logging for potention filter
if ($request->get('filter') === 'potention') {
$rejectedCount = PbgTask::whereIn('status', PbgTaskStatus::getRejected())->count();
Log::info('Potention filter details', [
'potention_count' => $finalCount,
'rejected_count' => $rejectedCount,
'total_all_records' => PbgTask::count(),
'note' => 'Potention filter excludes rejected data'
]);
}
// Also log to console for immediate debugging
if ($request->has('filter')) {
error_log('RequestAssignment Filter Debug: ' . $request->get('filter') . ' -> Count: ' . $finalCount);
}
return RequestAssignmentResouce::collection($query->paginate());
}
public function report_payment_recaps(Request $request)
{
try {
// Query dengan group by kecamatan dan sum nilai_retribusi_keseluruhan_simbg
$query = PbgTaskGoogleSheet::select(
'kecamatan',
DB::raw('SUM(nilai_retribusi_keseluruhan_simbg) as total')
)
->groupBy('kecamatan')
->paginate(10);
// Return hasil dalam JSON format
return response()->json([
'success' => true,
'data' => $query
]);
} catch (Exception $e) {
Log::error($e->getMessage());
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
}
}
public function export_excel_district_payment_recaps(){
return Excel::download(new DistrictPaymentRecapExport, 'laporan-rekap-data-pembayaran.xlsx');
}
public function export_pdf_district_payment_recaps(){
$data = PbgTaskGoogleSheet::select(
'kecamatan',
DB::raw('SUM(nilai_retribusi_keseluruhan_simbg) as total')
)
->groupBy('kecamatan')->get();
$pdf = Pdf::loadView('exports.district_payment_report', compact('data'));
return $pdf->download('laporan-rekap-data-pembayaran.pdf');
}
public function report_pbg_ptsp()
{
try {
// Query dengan group by status dan count total per status
$query = PbgTask::select(
'status',
'status_name',
DB::raw('COUNT(*) as total')
)
->groupBy('status', 'status_name')
->paginate(10);
// Return hasil dalam JSON format
return response()->json([
'success' => true,
'data' => $query
]);
} catch (Exception $e) {
Log::error($e->getMessage());
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
}
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}