diff --git a/Dockerfile b/Dockerfile index c64d04d..5ec1095 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,9 @@ RUN apt-get update && apt-get install -y \ git curl zip unzip libpng-dev libonig-dev libxml2-dev libzip-dev \ && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip +# Override PHP memory limit +COPY docker/php/memory-limit.ini /usr/local/etc/php/conf.d/memory-limit.ini + # Install Node.js RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ && apt-get install -y nodejs @@ -64,6 +67,9 @@ RUN apt-get update && apt-get install -y \ supervisor \ && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip +# Override PHP memory limit +COPY docker/php/memory-limit.ini /usr/local/etc/php/conf.d/memory-limit.ini + # Install Node.js RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ && apt-get install -y nodejs diff --git a/app/Exports/PbgTaskExport.php b/app/Exports/PbgTaskExport.php new file mode 100644 index 0000000..93e5a24 --- /dev/null +++ b/app/Exports/PbgTaskExport.php @@ -0,0 +1,118 @@ +category = $category; + $this->year = $year; + } + + /** + * @return \Illuminate\Support\Collection + */ + public function collection() + { + $query = PbgTask::query() + ->whereYear('task_created_at', $this->year); + + // Menggunakan switch case karena lebih readable dan maintainable + // untuk multiple conditions yang berbeda + switch ($this->category) { + case PbgTaskFilterData::all->value: + // Tidak ada filter tambahan, ambil semua data + break; + + case PbgTaskFilterData::business->value: + $query->where('application_type', 'business'); + break; + + case PbgTaskFilterData::non_business->value: + $query->where('application_type', 'non-business'); + break; + + case PbgTaskFilterData::verified->value: + $query->where('is_valid', true); + break; + + case PbgTaskFilterData::non_verified->value: + $query->where('is_valid', false); + break; + + case PbgTaskFilterData::potention->value: + $query->where('status', 'potention'); + break; + + case PbgTaskFilterData::issuance_realization_pbg->value: + $query->where('status', 'issuance-realization-pbg'); + break; + + case PbgTaskFilterData::process_in_technical_office->value: + $query->where('status', 'process-in-technical-office'); + break; + + case PbgTaskFilterData::waiting_click_dpmptsp->value: + $query->where('status', 'waiting-click-dpmptsp'); + break; + + case PbgTaskFilterData::non_business_rab->value: + $query->where('application_type', 'non-business') + ->where('consultation_type', 'rab'); + break; + + case PbgTaskFilterData::non_business_krk->value: + $query->where('application_type', 'non-business') + ->where('consultation_type', 'krk'); + break; + + case PbgTaskFilterData::business_rab->value: + $query->where('application_type', 'business') + ->where('consultation_type', 'rab'); + break; + + case PbgTaskFilterData::business_krk->value: + $query->where('application_type', 'business') + ->where('consultation_type', 'krk'); + break; + + case PbgTaskFilterData::business_dlh->value: + $query->where('application_type', 'business') + ->where('consultation_type', 'dlh'); + break; + + default: + // Jika category tidak dikenali, return empty collection + return collect(); + } + + return $query->select([ + 'registration_number', + 'document_number', + 'owner_name', + 'address', + 'name as building_name', + 'function_type' + ])->get(); + } + + public function headings(): array{ + return [ + 'Nomor Registrasi', + 'Nomor Dokumen', + 'Nama Pemilik', + 'Alamat Pemilik', + 'Nama Bangunan', + 'Fungsi Bangunan', + ]; + } +} diff --git a/app/Http/Controllers/Api/BigDataResumeController.php b/app/Http/Controllers/Api/BigDataResumeController.php index 08e1995..3fa0099 100644 --- a/app/Http/Controllers/Api/BigDataResumeController.php +++ b/app/Http/Controllers/Api/BigDataResumeController.php @@ -486,14 +486,14 @@ class BigDataResumeController extends Controller { try { // Get sum and count from PbgTaskPayment model - $totalSum = PbgTaskPayment::whereYear('payment_date', date('Y'))->sum('pad_amount') ?? 0; - $totalCount = PbgTaskPayment::whereYear('payment_date', date('Y'))->count() ?? 0; + $stats = PbgTaskPayment::whereNotNull('payment_date_raw') + ->whereNotNull('retribution_total_pad') + ->whereYear('payment_date_raw', date('Y')) + ->selectRaw('SUM(retribution_total_pad) as total_sum, COUNT(*) as total_count') + ->first(); - Log::info("Real-time PBG Task Payments Data", [ - 'total_records' => $totalCount, - 'total_sum' => $totalSum, - 'source' => 'pbg_task_payments table' - ]); + $totalSum = $stats->total_sum ?? 0; + $totalCount = $stats->total_count ?? 0; return [ 'sum' => (float) $totalSum, diff --git a/docker/php/memory-limit.ini b/docker/php/memory-limit.ini new file mode 100644 index 0000000..3ab26b3 --- /dev/null +++ b/docker/php/memory-limit.ini @@ -0,0 +1 @@ +memory_limit=512M diff --git a/resources/js/dashboards/bigdata.js b/resources/js/dashboards/bigdata.js index 26c66cf..84f9355 100644 --- a/resources/js/dashboards/bigdata.js +++ b/resources/js/dashboards/bigdata.js @@ -565,12 +565,11 @@ class BigData { document .querySelectorAll(".document-total.chart-payment-pbg-task") .forEach((element) => { - // const sum = this.safeGet( - // this.resumeBigData, - // "pbg_task_payments.sum", - // 0 - // ); - const sum = 9559353945; + const sum = this.safeGet( + this.resumeBigData, + "pbg_task_payments.sum", + 0 + ); element.innerText = `Rp.${addThousandSeparators( sum.toString() )}`;