$val) {
if ($type === $val) {
$keyType = ucwords($key);
break;
}
}
return $keyType;
}
function transChartOfAccountType($type)
{
return $type ? __('chart_of_account.type.' . strtolower($type)) : "";
}
/**
* @param Builder $query
* @param string|null $lessDate
* @param array $betweenTwoDates
* @param string $columnName
* @return Builder
*/
function lessAndBetweenDateQuery($query, $lessDate = null, $betweenTwoDates = [], $columnName = "date")
{
if ($lessDate) {
$query = $query->where($columnName, '<=', $lessDate);
} elseif ($betweenTwoDates[0] ?? "" and $betweenTwoDates[1] ?? "") {
$query = $query->whereBetween($columnName, [
$betweenTwoDates[0],
$betweenTwoDates[1]
]);
}
return $query;
}
function getTaxRate($taxRateId)
{
$ItaxRepository = app(TaxRepositoryInterface::class);
return $ItaxRepository->findById($taxRateId)->rate ?? 0;
}
function no($prefix, $lastFormat, $numZero = 7)
{
$lastFormat = (int) str_replace("{$prefix}-", "", $lastFormat ?? "0");
$lastFormat = sprintf("%0{$numZero}d", ++$lastFormat); // menambahkan nol didepan
return "{$prefix}-{$lastFormat}";
}
function formatDate($val, $format = "Y-m-d")
{
return $val ? date(
$format,
strtotime($val)
) : null;
}
/**
* set value only number
*
* @param string $val
* @return string
*/
function numberOnly(?string $val)
{
return preg_replace("/[^0-9]/", "", $val);
}
/**
* Menghapus format angka dengan titik, misal "200.000" menjadi "200000".
*
* @param string $value
* @return int
*/
function removeDots(string $value): int
{
return (int) str_replace('.', '', $value);
}
/**
* set value only number
*
* @param string $val
* @return string
*/
function qtyFormat(?string $val)
{
$newVal = preg_replace("/\,/", ".", $val);
return (float) preg_replace("/[^0-9\.]/", "", $newVal);
}
function currentUserId()
{
return Auth::id();
}
function currentUserRoleId()
{
return Auth::user()->role_id ?? null;
}
function ruleArrayTrans($arrayLangKey, $objLangKey = null)
{
return _($arrayLangKey) . '.*' . ($objLangKey ? '.' . _($objLangKey) : '');
}
function ruleObjTrans($objLangKey, $objPropLangKey)
{
return _($objLangKey) . '.' . _($objPropLangKey);
}
function throwError($arg)
{
$msg = $arg->getMessage() ?? "";
throw new Error($msg);
}
function presenceChannelHandshake($user)
{
return [
"id" => $user->id,
"name" => $user->name,
"email" => $user->email,
];
}
function getCompany()
{
$companyRepository = app(CompanyRepositoryInterface::class);
return $companyRepository->fetch();
}
function getCurrentUser()
{
return Auth::user() ?? Auth::guard('jwt_mobile')->user();
}
function getAuthRoleName()
{
return strtolower(Auth::user()->userRole->role->name ?? Auth::guard('jwt_mobile')->user()->userRole->role->name ?? "");
}
function getAuthRoleId()
{
return Auth::user()->userRole->role_id ?? Auth::guard('jwt_mobile')->user()->userRole->role_id ?? "";
}
function displayRequirementNames($requirements)
{
if (!$requirements) {
return;
}
$str = "
";
foreach ($requirements as $requirement) {
$text = ($requirement->name ?? $requirement->title ?? '-');
$str .= "- {$text}
";
}
return $str;
}
function formatDateWithDayName($str)
{
if (!$str) {
return;
}
return dayName(date('l', strtotime($str))) . ", " . date("d") . " " . monthName(date("m")) . " " . date("Y");
}
function monthName($m)
{
if (config("app.locale") === "id") {
$month = [
1 => 'Januari',
2 => 'Februari',
3 => 'Maret',
4 => 'April',
5 => 'Mei',
6 => 'Juni',
7 => 'Juli',
8 => 'Agustus',
9 => 'September',
10 => 'Oktober',
11 => 'November',
12 => 'Desember',
];
return $month[(int)$m];
}
return "";
}
function dayName($d)
{
if (config("app.locale") === "id") {
$days = [
0 => 'Minggu',
1 => 'Senin',
2 => 'Selasa',
3 => 'Rabu',
4 => 'Kamis',
5 => 'Jumat',
6 => 'Sabtu',
];
return $days[(int)$d];
}
return "";
}
function monthToRomawi($month)
{
$roman = array(
1 => "I",
"II",
"III",
"IV",
"V",
"VI",
"VII",
"VIII",
"IX",
"X",
"XI",
"XII"
);
return $roman[(int) $month];
}
function httpRequest($URL)
{
ini_set('memory_limit', '-1');
set_time_limit(0);
$ch = curl_init($URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$result = curl_exec($ch);
curl_close($ch);
return $result ? json_decode($result) : null;
}
function formatDateTime($val = "", $format = "Y-m-d H:i:s")
{
return $val ? date(
$format,
strtotime((string)$val)
) : $val;
}
function configPDF($pdf)
{
return $pdf->getDomPdf()->setHttpContext(stream_context_create([
'ssl' => [
'verify_peer' => FALSE,
'verify_peer_name' => FALSE,
'allow_self_signed' => TRUE
]
]));
}
/**
* @param array $pdf ['content', 'filename']
* @return Response
*/
function pdfStream(array $pdf)
{
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") > 0) {
$contentDisposition = 'inline; filename=' . rawurlencode($pdf['filename']);
} else {
$contentDisposition = 'inline; filename*=UTF-8\'\'' . rawurlencode($pdf['filename']);
}
return response()->make($pdf['content'], 200, [
'Content-Disposition' => $contentDisposition,
'Content-Type' => 'application/pdf',
]);
}
function importSeederServiceCategoryId()
{
return session()->get("service_category_id");
}
function setImportSeederServiceCategoryId($val)
{
session()->flash("service_category_id", $val);
}
function setImportSeederBaseURL($val)
{
session()->flash("import_base_url", $val);
}
function importSeederBaseURL($url)
{
return session()->get("import_base_url") . "/" . preg_replace('/\//', "", $url, 1);
}
function setImportSeederBaseName($val)
{
session()->flash("import_base_name", $val);
}
function importSeederBaseName()
{
return session()->get("import_base_name");
}
function setImportSeederDatabaseName($val)
{
session()->flash("import_database_name", $val);
}
function importSeederDatabaseName()
{
return session()->get("import_database_name");
}
function menuTrans($key, $propVal)
{
return __("menu." . $key . ".$propVal");
}
/**
* @param Builder $query
* @param string $columnName
* @param string $filterDate today|yesteday|tomorrow|this_month|last_month
* @return Builder
*/
function filterDateQuery($query, $columnName, $filterDate)
{
$filterDateExplode = explode(" ", $filterDate);
if (count($filterDateExplode) > 1) {
$query = $query->whereBetween($columnName, [
$filterDateExplode[0],
$filterDateExplode[1],
]);
} elseif ($filterDate === "today") {
$query = $query->where($columnName, date('Y-m-d'));
} elseif ($filterDate === "yesterday") {
$query = $query->where($columnName, date('Y-m-d', strtotime("-1 days")));
} elseif ($filterDate === "tomorrow") {
$query = $query->where($columnName, date('Y-m-d', strtotime("+1 days")));
} elseif ($filterDate === "this_month") {
$query = $query->whereMonth($columnName, '=', date('m'))->whereYear($columnName, '=', date('Y'));
} elseif ($filterDate === "last_month") {
$query = $query->whereMonth($columnName, '=', date('m', strtotime("-1 month")))->whereYear($columnName, '=', date('Y'));
}
return $query;
}
function changeDatabase($name = null)
{
if (!$name) {
session()->forget("__active_service_category");
return;
}
/**
* @var ServiceCategoryRepositoryInterface
*/
$serviceCategoryRepository = app(ServiceCategoryRepositoryInterface::class);
$serviceCategory = $serviceCategoryRepository->findByDatabaseName($name);
session()->flash("__active_service_category", $serviceCategory->id ?? "");
}
function getActiveServiceCategoryId()
{
$serviceFacade = app(ServiceCategoryFacade::class);
return session()->get("__active_service_category") ?? $serviceFacade->getCurrentService()->id ?? null;
}
function changeDatabaseToCurrent()
{
$serviceFacade = app(ServiceCategoryFacade::class);
changeDatabase($serviceFacade->getCurrentServiceDBName() ?? importSeederDatabaseName());
}
function currentDatabaseName()
{
$serviceFacade = app(ServiceCategoryFacade::class);
return $serviceFacade->getCurrentServiceDBName();
}
function setSiteProjectId($id = null)
{
if (!$id) {
session()->forget("__active_site_project");
return;
}
session()->flash("__active_site_project", $id);
}
function getActiveSiteProjectId()
{
$siteProjectFacade = app(SiteProjectFacade::class);
return session()->get("__active_site_project") ?? $siteProjectFacade->getCurrentSiteProject()->id ?? null;
}
function paginateArray($data, $perPage = 15)
{
$page = Paginator::resolveCurrentPage();
$total = count($data);
$results = array_slice($data, ($page - 1) * $perPage, $perPage);
return new LengthAwarePaginator($results, $total, $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
]);
}
function indonesianDate($date)
{
return date('d-m-Y', strtotime($date));
}
function rupiahCurrency($nominal)
{
return number_format($nominal, 0, ',', '.');
}
function numberToWord($number)
{
$number = abs($number);
$read = array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas");
$result = "";
if ($number < 12) {
$result = " " . $read[$number];
} elseif ($number < 20) {
$result = numberToWord($number - 10) . " Belas";
} elseif ($number < 100) {
$result = numberToWord($number / 10) . " Puluh" . numberToWord($number % 10);
} elseif ($number < 200) {
$result = " Seratus" . numberToWord($number - 100);
} elseif ($number < 1000) {
$result = numberToWord($number / 100) . " Ratus" . numberToWord($number % 100);
} elseif ($number < 2000) {
$result = " Seribu" . numberToWord($number - 1000);
} elseif ($number < 1000000) {
$result = numberToWord($number / 1000) . " Ribu" . numberToWord($number % 1000);
} elseif ($number < 1000000000) {
$result = numberToWord($number / 1000000) . " Juta" . numberToWord($number % 1000000);
} elseif ($number >= 1000000000) {
$result = numberToWord($number / 1000000000) . " Miliar" . numberToWord($number % 1000000000);
}
return $result;
}
function getActiveCityBranchId()
{
$cityBranchFacade = app(CityBranchFacade::class);
return session()->get("__active_city_branch") ?? $cityBranchFacade->getCurrentCityBranch()->id ?? null;
}
function getGeneralManager()
{
$role = Role::select('id')->where('name', 'General Manager')->first();
if ($role) {
return User::select('id', 'name')->whereHas('userRole', function ($query) use ($role) {
$query->where('role_id', $role->id);
})->first() ?? null;
}
return null;
}
function getDirector()
{
$role = Role::select('id')->where('name', 'Director')->first();
if ($role) {
return User::select('id', 'name')->whereHas('userRole', function ($query) use ($role) {
$query->where('role_id', $role->id);
})->first() ?? null;
}
return null;
}
function getDirectorAndGM()
{
$role = Role::select('id')->where('name', 'Director')->orWhere('name', 'General Manager')->get();
if ($role) {
$arr = [];
foreach ($role ?? [] as $res) {
$arr[] = $res->id;
}
return User::select('id', 'name')->whereHas('userRole', function ($query) use ($arr) {
$query->whereIn('role_id', $arr);
})->get() ?? null;
}
}
function format_phone_number($phone_number)
{
// Ganti '0' di awal dengan '62' atau tambahkan '62' jika tidak ada '0' di awal
if (preg_match('/^0/', $phone_number)) {
return preg_replace('/^0/', '+62', $phone_number);
} else {
return '+62' . $phone_number;
}
}
// XENDIT
function xenditServiceCategory(): array
{
$serviceCategory = [
1 => null,
2 => null,
3 => null,
4 => null,
5 => ["env" => env("XENDIT_SECRET_CLEAN"), "code" => "clean"],
6 => ["env" => env("XENDIT_SECRET_PEST"), "code" => "pest"],
7 => null,
9 => null,
10 => null,
11 => null,
12 => null,
];
$xenditSecret = $serviceCategory[getActiveServiceCategoryId()] ?? [];
return $xenditSecret;
}
function xenditInvoice($externalId, $amount, $customer, $xenditKey)
{
$curlHandler = curl_init();
$request = [
"external_id" => $externalId,
"amount" => $amount,
"description" => "Invoice Demo #123",
"invoice_duration" => 604800, // one week
"customer" => $customer,
"customer_notification_preference" => [
"invoice_created" => [
"whatsapp",
"email"
],
"invoice_reminder" => [
"whatsapp",
"email"
],
"invoice_paid" => [
"whatsapp",
"email"
]
],
"currency" => "IDR",
"payment_methods" => ["BNI", "BSI", "BRI", "MANDIRI"]
];
$data_string = json_encode($request);
$userName = $xenditKey;
$password = null;
curl_setopt_array($curlHandler, [
CURLOPT_URL => "https://api.xendit.co/v2/invoices",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POSTFIELDS => $data_string,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $userName . ':' . $password,
CURLOPT_HTTPHEADER => [
'Accept: application/json',
'Content-Type: application/json',
]
]);
$response = curl_exec($curlHandler);
curl_close($curlHandler);
$response = json_decode($response, true);
// if (isset($response["error_code"])) {
// return xenditInvoice($externalId, $amount, $customer, $xenditKey);
// }
return $response;
}
function allowMinusSubtotal($subtotal)
{
if (preg_match('/^-/', $subtotal)) {
$subtotal = '-' . numberOnly($subtotal); // Gabungkan dengan minus
} else {
$subtotal = numberOnly($subtotal); // Gunakan numberOnly jika tidak negatif
}
return $subtotal;
}