replace('Rp', '') ->replace('.', '') ->replace(' ', '') ->__toString(); return (int) $cleaned; } } if (! function_exists('percentage')) { /** * 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 percentage(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 ? percentage($amount) : currency($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('sanitizeIntegers')) { /** * Sanitize integer values in an array (convert empty string/null to 0) * * @param array $integerKeys Keys to sanitize (empty = all keys) */ function sanitizeIntegers(array $data, array $integerKeys = []): array { foreach ($data as $key => $value) { if (empty($integerKeys) || in_array($key, $integerKeys)) { if ($value === '' || $value === null) { $data[$key] = 0; } } } return $data; } } if (! function_exists('formatPhoneNumber')) { /** * Format Indonesian phone number with customizable country prefix * * @param string $prefix Country prefix (default: '+62') * @param bool $useDash Use dashes for formatting (default: false) */ function formatPhoneNumber(string $number, string $prefix = '+62', bool $useDash = false): string { $clean = preg_replace('/\D+/', '', $number); $clean = preg_replace('/^(0|62)/', '', $clean); $formatted = $prefix.$clean; if ($useDash) { $formatted = preg_replace('/(\d{3})(\d{3,4})(\d{3,4})(\d+)?/', $prefix.'-$1-$2-$3$4', $formatted); } return $formatted; } }