@php /* |-------------------------------------------------------------------------- | Sinkron nominal AI Sales Report |-------------------------------------------------------------------------- | - Pembulatan harga/tagihan/omset/laba/piutang ke atas kelipatan Rp1.000. | - Tidak membuat minimal Rp10.000 di laporan AI karena template ini hanya | menerima data ringkasan/JSON dan tidak punya info unit meter/m2 per item. | - PPN, pajak, tax, kembalian/change, qty, jumlah item tidak ikut dibulatkan. */ $__roundTo = 1000; $__formatRupiah = function ($value) { return 'Rp ' . number_format((float) $value, 0, ',', '.'); }; $__parseNumber = function ($value) { if (is_numeric($value)) { return (float) $value; } if (!is_string($value)) { return null; } $text = trim($value); if ($text === '') { return null; } $hasMoneyMark = preg_match('/rp|idr|rupiah/i', $text); $clean = preg_replace('/[^0-9,\.\-]/', '', $text); if ($clean === '' || $clean === '-' || $clean === null) { return null; } if (str_contains($clean, ',') && str_contains($clean, '.')) { $clean = str_replace('.', '', $clean); $clean = str_replace(',', '.', $clean); } elseif ($hasMoneyMark) { $clean = str_replace('.', '', $clean); $clean = str_replace(',', '.', $clean); } elseif (substr_count($clean, '.') > 1) { $clean = str_replace('.', '', $clean); } elseif (substr_count($clean, ',') > 1) { $clean = str_replace(',', '', $clean); } elseif (str_contains($clean, ',') && !str_contains($clean, '.')) { $clean = str_replace(',', '.', $clean); } return is_numeric($clean) ? (float) $clean : null; }; $__isMoneyColumn = function ($column, $value) { $column = strtolower((string) $column); $valueText = strtolower((string) $value); $exclude = ['ppn', 'pajak', 'tax', 'kembalian', 'change', 'qty', 'kuantitas', 'jumlah item', 'jumlah order', 'jumlah transaksi', 'jumlah produk', 'persen', '%', 'tanggal', 'date', 'invoice', 'status']; foreach ($exclude as $word) { if (str_contains($column, $word)) { return false; } } if (preg_match('/rp|idr|rupiah/i', $valueText)) { return true; } $include = ['total', 'omset', 'pendapatan', 'revenue', 'penjualan', 'tagihan', 'dibayar', 'bayar', 'sisa', 'piutang', 'laba', 'hpp', 'biaya', 'beban', 'modal', 'harga', 'subtotal', 'grand', 'net', 'amount', 'income', 'profit', 'cost']; foreach ($include as $word) { if (str_contains($column, $word)) { return true; } } return false; }; $__syncDisplayValue = function ($column, $value) use ($__parseNumber, $__isMoneyColumn, $__formatRupiah, $__roundTo) { if (is_array($value)) { return json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } if (!$__isMoneyColumn($column, $value)) { return $value; } $number = $__parseNumber($value); if ($number === null) { return $value; } if ($number <= 0) { return $__formatRupiah(0); } return $__formatRupiah(ceil($number / $__roundTo) * $__roundTo); }; @endphp

{{ $title }}

Generated: {{ $generatedAt }}
Pertanyaan
{{ $question }}

Ringkasan AI

{{ $description ?: '-' }}
@if(!empty($exec))

Executive Summary

@if(!empty($exec['trend_badge']))
Trend: {{ $exec['trend_badge'] }}
@endif
@endif

Data

@if(!empty($rows)) @foreach(array_keys($rows[0]) as $col) @endforeach @foreach($rows as $row) @foreach($row as $col => $val) @php $displayVal = $__syncDisplayValue($col, $val); $isRight = $__isMoneyColumn($col, $val) && $__parseNumber($val) !== null; @endphp @endforeach @endforeach
{{ $col }}
{{ $displayVal }}
@else
Tidak ada data.
@endif