240 lines
9.2 KiB
PHP
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)
|
|
{
|
|
//
|
|
}
|
|
}
|