replace('Rp', '') ->replace('.', '') ->replace(' ', '') ->__toString(); return (int) $cleaned; } } if (! function_exists('formatPercentage')) { /** * Format value as percentage * * @param int $precision Precision (default: 2) * @param int $maxPrecision Max precision (default: 2) * @param string $locale Locale for formatting (default: 'id_ID') */ function formatPercentage(int|float $value, int $precision = 2, int $maxPrecision = 2, string $locale = 'id_ID'): string { return Number::percentage($value, $precision, $maxPrecision, $locale); } } if (! function_exists('formatDiscount')) { /** * Format discount based on voucher type (percentage or fixed amount) */ function formatDiscount(int|float $amount, VoucherType $type, string $currency = 'Rp'): string { return $type === VoucherType::PERCENTAGE ? formatPercentage($amount) : formatCurrencyNumber($amount, $currency); } } if (! function_exists('generateReferralCode')) { /** * Generate referral code from username and unique number */ function generateReferralCode(string $username, int $unique): string { $prefix = Str::substr($username, 0, 6); $year = date('y'); return Str::upper($prefix).$year.$unique; } } if (! function_exists('convertNumberToIndonesianWords')) { function convertNumberToIndonesianWords($angka) { $angka = (int) abs($angka); $huruf = ['', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan', 'sepuluh', 'sebelas']; if ($angka < 12) { return $huruf[$angka]; } elseif ($angka < 20) { return $huruf[$angka - 10].' belas'; } elseif ($angka < 100) { $result = $huruf[$angka / 10].' puluh'; $sisa = $angka % 10; if ($sisa > 0) { $result .= ' '.$huruf[$sisa]; } return $result; } elseif ($angka < 200) { return 'seratus '.convertNumberToIndonesianWords($angka - 100); } elseif ($angka < 1000) { $result = $huruf[$angka / 100].' ratus'; $sisa = $angka % 100; if ($sisa > 0) { $result .= ' '.convertNumberToIndonesianWords($sisa); } return $result; } elseif ($angka < 2000) { return 'seribu '.convertNumberToIndonesianWords($angka - 1000); } elseif ($angka < 1000000) { $result = convertNumberToIndonesianWords($angka / 1000).' ribu'; $sisa = $angka % 1000; if ($sisa > 0) { $result .= ' '.convertNumberToIndonesianWords($sisa); } return $result; } elseif ($angka < 1000000000) { $result = convertNumberToIndonesianWords($angka / 1000000).' juta'; $sisa = $angka % 1000000; if ($sisa > 0) { $result .= ' '.convertNumberToIndonesianWords($sisa); } return $result; } elseif ($angka < 1000000000000) { $result = convertNumberToIndonesianWords($angka / 1000000000).' milyar'; $sisa = $angka % 1000000000; if ($sisa > 0) { $result .= ' '.convertNumberToIndonesianWords($sisa); } return $result; } elseif ($angka < 1000000000000000) { $result = convertNumberToIndonesianWords($angka / 1000000000000).' trilyun'; $sisa = $angka % 1000000000000; if ($sisa > 0) { $result .= ' '.convertNumberToIndonesianWords($sisa); } return $result; } else { return 'Angka terlalu besar'; } } }