Files
erahn-click/app/Http/Controllers/BayaranController.php
T
2024-07-19 09:11:25 +08:00

320 lines
10 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Services\BillplzService;
use Carbon\Carbon;
use Illuminate\Http\Client\Pool;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use Money\Money;
class BayaranController extends Controller
{
public function PembayaranAction(Request $request)
{
$totalSagInCartInput = $request->totalSagInCartInput;
$validated = $request->validate([
'totalSagInCartInput' => 'required',
]);
$norujukanList = json_decode($request->totalSagInCartInput);
$arraybayar = array_map(fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x)->json()[0][0], $norujukanList);
$arraybayar = $this->setUpahTawarruq($arraybayar);
$norujukanRecentlyAttemptPayment = array_map(
fn($x) => Http::arrahn()->get('/portal/searchsagonline/', ['norujukan' => $x])->json(),
$norujukanList
);
$isNorujukanRecentlyAttemptPayment = in_array(true, $norujukanRecentlyAttemptPayment);
if ($isNorujukanRecentlyAttemptPayment) {
return redirect()->route('home')->with('errorsagonline', 'Sila Tunggu Sebentar!');
}
$gadaiContractExceed12Month = array_filter($arraybayar, fn($x) => $x['tempoh'] >= 12);
$isGadaiContractExceed12Month = sizeof($gadaiContractExceed12Month) > 0;
if ($isGadaiContractExceed12Month) {
return redirect()->route('home')->with('error', 'SAG Yang Dipilih Akan/Telah Tamat Kontrak 12 Bulan. Sila Hadir Ke Kaunter Cawangan Untuk Pembayaran/Penebusan.');
}
return view('includes.bayaran.pembayaransag', compact('arraybayar'));
}
public function PembayaranEngine(Request $request, BillplzService $billplzService)
{
['email' => $customerEmail, 'notel' => $customerPhoneNumber, 'name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray();
$bayaranArrahn = array_filter($request->txtjenisbayaran, fn($x) => $x == 'arrahn');
$bayaranOthers = array_filter($request->txtjenisbayaran, fn($x) => $x != 'arrahn');
$bayaranArrahnArray = array_map(function ($x) use ($customerName, $customerIcno, $request) {
return [
'customer_name' => $customerName,
'nokp' => $customerIcno,
'kodcaw' => $request->txtkodcawhidden[$x],
'norujukan' => $request->txtnorujukanhidden[$x],
'bayaran' => $request->txtbayaranhidden[$x],
'txtjbghidden' => $request->txtjbghidden[$x],
'txtupahhidden' => $request->txtupahhidden[$x],
];
}, array_keys($bayaranArrahn));
$bayaranOthersArray = array_map(function ($x) use ($customerName, $customerIcno, $request) {
return [
'customer_name' => $customerName,
'nokp' => $customerIcno,
'kodcaw' => $request->txtkodcawhidden[$x],
'norujukan' => $request->txtnorujukanhidden[$x],
'bayaran' => $request->txtbayaranhidden[$x],
];
}, array_keys($bayaranOthers));
$paymentArray = array_merge($bayaranArrahnArray, $bayaranOthersArray);
$getPaymentSum = function () use ($paymentArray) {
$billPlzTransactionFee = Money::MYR(100);
$sum = fn() => array_reduce($paymentArray, fn($accumulator, $currentItem) => $accumulator + round($currentItem['bayaran'], 1), 0) * 100;
return Money::MYR($sum())->add($billPlzTransactionFee);
};
$bill = $billplzService->createBill([
$customerEmail,
$customerPhoneNumber,
$customerName,
$getPaymentSum(),
]);
$isRecordTransactionSuccess = $this->recordTransaction($paymentArray, $bill);
if ($isRecordTransactionSuccess) {
session([
'array_payment' => $paymentArray,
'payment_method' => 'login',
]);
return redirect($bill['url'] . '?auto_submit=true');
}
}
public function recordTransaction($paymentArray, $bill)
{
['name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray();
$getlatestNoSiri = function () {
$previous_siri = Http::arrahn()->get('/api/online/transaction')->json();
if ($previous_siri) {
return $previous_siri['nosiri'] + 1;
} else {
return 1;
}
};
$generateTransactionReferenceNumber = function () use ($getlatestNoSiri) {
[$day, $month, $year] = [now()->day, now()->month, now()->format('y')];
return 'APKB' . $day . $month . $year . sprintf("%08d", $getlatestNoSiri());
};
Http::pool(fn(Pool $pool) =>
collect($paymentArray)->map(fn($payment) =>
$pool->arrahn()->post('/api/online/transaction', [
'nokp' => $customerIcno,
'reference_no' => $generateTransactionReferenceNumber(),
'nosiri' => $getlatestNoSiri(),
'billplz_id' => $bill['id'],
'norujukan' => $payment['norujukan'],
'kodcaw' => $payment['kodcaw'],
'total_payment' => $payment['bayaran'],
'customer_name' => $customerName,
])
)
);
Http::arrahn()->put('/api/transaction/online/tagportal', [
'billplz_id' => $bill['id'],
])->json();
return true;
}
public function ResitBayaran(Request $request)
{
$payment_details = $request->payment;
$kpbaru = Auth::User()->icno;
$customer = Http::arrahn()->get('/api/customers/' . $kpbaru)->json();
$customer_details = $customer;
$current = Carbon::now();
$current = new Carbon();
$date = $current->toDateTimeString();
$cawangan_info = Http::arrahn()->get('/api/cawangan/' . $payment_details['kodcaw'])->json();
$cawangan = Http::arrahn()->get('/api/cawangan/detail/' . $payment_details['kodcaw'])->json();
$cawangan_detail = $cawangan[0];
$nama_cawangan = $cawangan_info['details_caw'];
$gadai_details = Http::arrahn()->get('/api/gadai/norujukan/' . $payment_details['norujukan'])->json();
$gadai = $gadai_details[0][0];
return view('pembayaran.resit.resitportal', compact('customer_details', 'payment_details', 'cawangan_detail', 'nama_cawangan', 'gadai'));
}
public function callback(Request $request, BillplzService $billplzService)
{
$data = $billplzService->webhook($request->toArray());
$isBillUnpaid = $data['paid'] !== true;
if ($isBillUnpaid) {
Http::arrahn()->put('/api/online/transaction', [
'billplz_id' => $data['id'],
'status' => 'UNSUCCESSFUL',
'paid_at' => null,
]);
return response(200);
}
Http::arrahn()->put('/api/online/transaction', [
'billplz_id' => $data['id'],
'status' => 'PAID',
'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'),
]);
return response(200);
}
public function response(Request $request, BillplzService $billplzService)
{
$data = $billplzService->redirect($request->toArray());
$isBillUnpaid = $data['paid'] !== true;
if ($isBillUnpaid) {
Http::arrahn()->put('/api/online/transaction', [
'billplz_id' => $data['id'],
'status' => 'UNSUCCESSFUL',
'paid_at' => null,
]);
$transactionOnline = Http::arrahn()->get('/api/transaction/online/login', [
'billplz_id' => $data['id'],
])->json();
return redirect()->route('pay.failed');
}
Http::arrahn()->put('/api/online/transaction', [
'billplz_id' => $data['id'],
'status' => 'PAID',
'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'),
]);
$transactionOnline = Http::arrahn()->get('/api/transaction/online/login', [
'billplz_id' => $data['id'],
])->json();
return redirect()->route('pay.success', [
'transactionOnline' => $transactionOnline,
]);
}
public function successPayment(Request $request)
{
$transactionOnline = $request->transactionOnline;
$arraygadai = array_map(
fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x['norujukan'])->json()[0][0],
$transactionOnline
);
$arraycawangan = array_map(
fn($x) => Http::arrahn()->get('/api/cawangan/detail/' . $x['kodcaw'])->json()[0],
$transactionOnline
);
return view('pembayaran.result.berjayaportal', compact('transactionOnline', 'arraycawangan', 'arraygadai'));
}
public function failedPayment()
{
return view('pembayaran.result.gagalportal');
}
public function SenaraiPembayaran()
{
$api_url = config('api.url');
$arraysag = [];
$auth_user = Auth::user();
$belum_tebus = Http::arrahn()->get('/api/customers/' . $auth_user['icno'] . '/gadai/' . 'belum_tebus')->json();
if (is_array($belum_tebus)) {
if (sizeof($belum_tebus) > 0) {
foreach ($belum_tebus as $index => $bt) {
foreach ($bt as $index1 => $bet) {
array_push($arraysag, $bet);
}
}
}
}
$belum_tebus = $arraysag;
return view('includes.bayaran.senaraibayaransag', compact('belum_tebus', 'api_url'));
}
private function setUpahTawarruq($pembiayaan)
{
$getJenisKeuntungan = function($x){
$jenisKeuntungan = [
'1' => 'onepercent',
'0' => 'asal',
];
return $jenisKeuntungan[$x['tagbaru']];
};
$getUpahTawarruqPerPembiayaan = function($x) use($getJenisKeuntungan){
$jenisKeuntungan = $getJenisKeuntungan($x);
$upahTawarruq = Http::arrahn()->get('/api/upahtawarruq/'.$x['kodcaw'].'/'.$x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan])->json();
if($jenisKeuntungan == 'onepercent'){
$x['upah_tawarruq'] = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah'];
}
if($jenisKeuntungan == 'asal'){
$x['upah_tawarruq'] = $upahTawarruq;
}
return $x;
};
return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan);
}
}