You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
7.5 KiB
PHP

<?php
namespace App\Services;
use App\Models\Customer;
use App\Models\DepositHistory;
use App\Models\DepositLocation;
use App\Models\PaylaterHistory;
use App\Models\PoinHistory;
use App\Models\Sale;
use App\Models\Setting;
use Illuminate\Support\Carbon;
class GeneralService
{
public static function script_parser($script)
{
$data = [];
$lines = explode("\n", $script);
foreach ($lines as $line) {
$item = self::line_parser($line);
if ($item != null) {
$data[] = $item;
}
}
return $data;
}
public static function line_parser($line)
{
$item = null;
$commands = explode(' ', $line);
foreach ($commands as $command) {
if (str_contains($command, 'name')) {
$d = explode('=', $command);
$item['username'] = str_replace('"', '', $d[1]);
}
if (str_contains($command, 'password')) {
$d = explode('=', $command);
$item['password'] = str_replace('"', '', $d[1]);
}
if (str_contains($command, 'profile')) {
$d = explode('=', $command);
$item['profile'] = str_replace('"', '', $d[1]);
}
if (str_contains($command, 'comment')) {
$d = explode('=', $command);
$item['comment'] = str_replace('"', '', $d[1]);
}
if (str_contains($command, 'limit-bytes-total')) {
$d = explode('=', $command);
$item['quota'] = (int) str_replace('"', '', $d[1]);
}
}
info('item', [$item]);
return $item;
}
public static function getEnablePayment()
{
$payment = [];
$midtrans_enable = Setting::getByKey('MIDTRANS_ENABLED');
if ($midtrans_enable == 1) {
$payment[] = [
'name' => Setting::PAYMENT_MIDTRANS,
'logo' => null, //asset(Setting::getByKey('MIDTRANS_LOGO')),
'tagline' => '<p>(Verifikasi <b>Otomatis</b>)</p>',
'display_name' => 'Payment Gateway',
'admin_fee' => Setting::getByKey('MIDTRANS_ADMIN_FEE'),
'open_hours' => '24 Jam / Non Stop',
];
}
$enable = Setting::getByKey('ENABLE_MANUAL_TRANSFER');
if ($enable == 1) {
$openHourForm = Setting::getByKey('MANUAL_TRANSFER_OPEN_HOUR');
$closeHourForm = Setting::getByKey('MANUAL_TRANSFER_CLOSE_HOUR');
$openHour = Carbon::createFromFormat('H:i', $openHourForm);
$closeHour = Carbon::createFromFormat('H:i', $closeHourForm);
if (now()->between($openHour, $closeHour)) {
$payment[] = [
'name' => Setting::PAYMENT_MANUAL,
'logo' => null,
'tagline' => '<p>(Verifikasi <b>Manual</b> & upload bukti pembayaran)</p>',
'display_name' => 'Transfer Bank & E-Money',
'admin_fee' => Setting::getByKey('ADMINFEE_MANUAL_TRANSFER'),
'open_hours' => $openHourForm . ' - ' . $closeHourForm,
];
}
}
$enable = Setting::getByKey('ENABLE_CASH_DEPOSIT');
if ($enable == 1) {
$locations = DepositLocation::all(); // 30 partner
$enables = [];
foreach ($locations as $location) {
$openHour = Carbon::createFromFormat('H:i', $location->open_hour);
$closeHour = Carbon::createFromFormat('H:i', $location->close_hour);
$enables[] = now()->between($openHour, $closeHour);
}
if (in_array(true, $enables)) {
$payment[] = [
'name' => Setting::PAYMENT_CASH_DEPOSIT,
'logo' => null,
'tagline' => '<p>(Verifikasi <b>Manual</b> & upload bukti pembayaran)</p>',
'display_name' => Setting::getByKey('TEXT_CASH_DEPOSIT'),
'admin_fee' => Setting::getByKey('ADMINFEE_CASH_DEPOSIT'),
'open_hours' => null,
];
}
}
return $payment;
}
public static function getCartEnablePayment(Customer $customer, $total)
{
$payments = [];
$payments[] = [
'name' => Sale::PAYED_WITH_DEPOSIT,
'display_name' => 'Bayar dengan saldo Deposit',
'is_enable' => $customer->deposit_balance >= $total,
];
if ($customer->is_allow_paylater) {
$payments[] = [
'name' => Sale::PAYED_WITH_PAYLATER,
'display_name' => 'Bayar dengan saldo Hutang',
'is_enable' => $customer->paylater_remain >= $total,
];
}
return $payments;
}
public static function parserToHour($time)
{
$r = '';
$time = explode(':', $time);
foreach ($time as $t) { //00 : 00
if ($t < 10) {
$r .= '0' . (int) $t . ':';
} else {
$r .= $t . ':';
}
}
return substr($r, 0, -1);
}
public static function generatePaylaterTopupCode()
{
$code = PaylaterHistory::where('type', PaylaterHistory::TYPE_UPGRADE)
->whereDate('created_at', now())
->count() + 1;
return 'Invoice #TLH' . now()->format('dmy') . GeneralService::formatNumberCode($code);
}
public static function generateDepositCode()
{
$code = DepositHistory::where('type', DepositHistory::TYPE_DEPOSIT)
->whereDate('created_at', now())
->count() + 1;
return 'Invoice #DSR' . now()->format('dmy') . GeneralService::formatNumberCode($code);
}
public static function generateDepositRepayCode()
{
$code = DepositHistory::where('type', DepositHistory::TYPE_REPAYMENT)
->whereDate('created_at', now())
->count() + 1;
return 'Invoice #PLH' . now()->format('dmy') . GeneralService::formatNumberCode($code);
}
public static function generateSaleVoucherCode()
{
$code = Sale::whereDate('created_at', '=', now())
->where('payed_with', '!=', Sale::PAYED_WITH_POIN)
->count() + 1;
return 'Invoice #VCR' . now()->format('dmy') . GeneralService::formatNumberCode($code);
}
public static function generateBonusPoinCode()
{
$code = PoinHistory::whereDate('created_at', now())->count() + 1;
return 'Invoice #BPN' . now()->format('dmy') . GeneralService::formatNumberCode($code);
}
public static function generateExchangePoinCode()
{
$code = Sale::whereDate('created_at', '=', now())
->where('payed_with', '=', Sale::PAYED_WITH_POIN)
->count() + 1;
return 'Invoice #PVC' . now()->format('dmy') . GeneralService::formatNumberCode($code);
}
public static function formatNumberCode($number)
{
if ($number < 10) {
return '000' . $number;
}
if ($number < 100) {
return '00' . $number;
}
if ($number < 1000) {
return '0' . $number;
}
return $number;
}
public static function isAllowAffilate($key)
{
$isAllow = false;
$levels = json_decode(Setting::getByKey('AFFILATE_ALLOWED_LEVELS'));
foreach ($levels as $level) {
if ($key == $level->key) {
$isAllow = true;
}
}
return $isAllow;
}
}