Files
exchange-2.0/app/Classes/General/Helper.php
T
2025-11-10 13:46:37 +08:00

158 lines
4.0 KiB
PHP

<?php
namespace App\Classes\General;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use NumberToWords\NumberToWords;
class Helper
{
/**
* @param string $methodName
* @return string
*/
static function getPropertyName(string $methodName){
return Str::snake(str_replace('get', '', $methodName));
}
/**
* @param string $className
* @return array
*/
static function getClassMethodsArray(string $className){
return array_slice(get_class_methods($className), 1);
}
/**
* @param $log
* @return array
*/
static function debugLogger($log){
if($log && isset($log['message'])){
$message = $log['message'];
$substring = 'No data were found';
if (isset($message)) {
if (strpos($message, $substring) !== false) {
// Log::info('Message exist');
} else {
Log::info($log['message']);
}
}
}
}
/**
* @param null|string $param
* @return array
*/
static function deserializeFilters($param): array {
if(gettype($param) == "array"){
$json = implode(',', $param);
}
else{
$json = $param;
}
return $json !== null ? collect(json_decode($json))->toArray() : [];
}
/**
* @param ResourceCollection $collection
* @return array
*/
static function collectionResponse(ResourceCollection $collection){
return json_decode($collection->response()->getContent(), true);
}
/**
* Convert a given number to words based on the specified locale.
*
* @param int|float $number
* @param string $locale The locale to use for conversion (default is 'en').
* @return string
*/
static function convert($number, $locale = 'en')
{
$numberToWords = new NumberToWords();
$numberTransformer = $numberToWords->getNumberTransformer($locale);
$number = number_format((float)$number, 2, '.', '');
[$ringgit, $cents] = explode('.', $number);
$ringgitWords = $numberTransformer->toWords((int)$ringgit);
$centsWords = $numberTransformer->toWords((int)$cents);
return strtoupper('ringgit malaysia ' . $ringgitWords . ' and ' . $centsWords . ' cents only');
}
public static function getLHDNStateCodeByName($name)
{
$path = resource_path('data/lhdn/StateCodes.json');
if (!file_exists($path)) {
return null;
}
$json = file_get_contents($path);
$data = json_decode($json, true);
if (!is_array($data)) {
return null;
}
$name = strtolower(trim($name));
// Step 1: Try exact match
foreach ($data as $item) {
if (
isset($item['State']) &&
strtolower(trim($item['State'])) === $name
) {
return $item['Code'] ?? null;
}
}
// Step 2: Try partial match
foreach ($data as $item) {
if (
isset($item['State']) &&
str_contains(strtolower($item['State']), $name)
) {
return $item['Code'] ?? null;
}
}
return null;
}
public static function getLHDNMsicDescriptionByCode($code)
{
$path = resource_path('data/lhdn/MSICSubCategoryCodes.json');
if (!file_exists($path)) {
return null;
}
$json = file_get_contents($path);
$data = json_decode($json, true);
if (!is_array($data)) {
return null;
}
foreach ($data as $item) {
if (
isset($item['Code']) &&
$item['Code'] === $code
) {
return $item['Description'] ?? null;
}
}
return null;
}
}