Add online transaction log module

This commit is contained in:
Afiq Hamzah
2024-08-01 13:58:50 +08:00
parent 9dd661ddb3
commit 23ebcdd98e
7 changed files with 305 additions and 86 deletions
@@ -2,25 +2,24 @@
namespace App\Http\Controllers;
use App\TransactionOnline;
use App\Advansur;
use App\Transaction;
use App\TransaksiKeuntungan;
use App\Gadai;
use App\Cawangan;
use App\GlDetail;
use App\Audit;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Services\OnePercentServices;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request as HttpRequest;
use App\Support\v2\GadaiV2 as Version2Gadai;
use App\Support\v2\Calculation;
use App\Cawangan;
use App\Gadai;
use App\GlDetail;
use App\Http\Controllers\TebusController as TebusController;
use Illuminate\Support\Facades\Http;
use App\Services\Loggers\OnlineTransactionLoggerService;
use App\Services\OnePercentServices;
use App\Support\v2\Calculation;
use App\Support\v2\GadaiV2 as Version2Gadai;
use App\Transaction;
use App\TransactionOnline;
use App\TransactionOnlineStatus;
use App\TransaksiKeuntungan;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class TransactionOnlineController extends Controller
{
@@ -30,20 +29,18 @@ class TransactionOnlineController extends Controller
return response()->json($transactionOnline);
}
public function getListTransactionOnlineQuery(Request $request)
{
$date = $request->date ? $request->date : Carbon::now()->toDateString();
$transactionOnline = TransactionOnline::on('mysql7')
->whereDate('tarikh', $date)
->get();
->whereDate('tarikh', $date)
->get();
return response()->json($transactionOnline);
}
public function getLatestNosiri()
{
$current = Carbon::now();
@@ -75,7 +72,7 @@ class TransactionOnlineController extends Controller
'masa' => $current->toTimeString(),
'customer_name' => $request->customer_name,
'tempohbayar' => $sag['tempoh'],
'jenisbayaran' => $request->jenisbayaran ? $request->jenisbayaran : 'A'
'jenisbayaran' => $request->jenisbayaran ? $request->jenisbayaran : 'A',
]);
return response()->json($transaction, 201);
@@ -85,7 +82,7 @@ class TransactionOnlineController extends Controller
{
$transaction = TransactionOnline::on('mysql7')->where('billplz_id', '=', $request->billplz_id)->update(array(
'status' => $request->status,
'paid_at' => $request->paid_at
'paid_at' => $request->paid_at,
));
return response()->json($transaction, 200);
@@ -103,27 +100,40 @@ class TransactionOnlineController extends Controller
$gadai_data = Gadai::on($cawangan['mysql'])->where([['norujukan', $transaction['norujukan']], ['nokp', $transaction['nokp']]])->first();
if ($transaction->jenisbayaran == 'A') {
if ($gadai_data['hargajualan'] > 0) {
$response = $this->updateGadaiMarhunOnline($transaction['kodcaw'], $transaction['norujukan'], $transaction['total_payment'], $transaction['paid_at'], $transaction['tempohbayar']);
$response = $this->updateGadaiMarhunOnline($transaction['kodcaw'], $transaction['norujukan'], $transaction['total_payment'], $transaction['paid_at'], $transaction['tempohbayar'], $transaction['billplz_id']);
} else {
$this->createAdvansur($transaction['kodcaw'], $transaction['norujukan'], $transaction['total_payment'], $transaction['paid_at']);
}
}
GlDetail::on($cawangan['mysql'])->create([
$glDetailData = [
'kodcaw' => $transaction['kodcaw'],
'tarikh' => Carbon::parse($transaction['paid_at'])->format('Y-m-d'),
'dtacct' => '1000/010',
'ktacct' => '1000/020',
'descpt' => 'SERAHAN BAYAR ONLINE - ' . $transaction['norujukan'],
'serahan' => $transaction['total_payment'],
'teller' => 'ONLINE'
]);
'teller' => 'ONLINE',
];
TransactionOnline::on('mysql7')->where([['norujukan', $transaction['norujukan']], ['billplz_id', $transaction['billplz_id']]])->update([
try {
$glDetail = GlDetail::on($cawangan['mysql'])->create($glDetailData);
OnlineTransactionLoggerService::logsAfterDBTransaction($transaction->billplz_id, TransactionOnlineStatus::CRONJOB_REGISTER_GLDETAIL, $glDetail, $glDetailData);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($transaction->billplz_id, TransactionOnlineStatus::CRONJOB_REGISTER_GLDETAIL, $glDetail, $e->getMessage());
}
$transactionOnlineData = [
'update_status' => 1,
'update_serahan' => 1
]);
'update_serahan' => 1,
];
try {
$transactionOnline = TransactionOnline::on('mysql7')->where([['norujukan', $transaction['norujukan']], ['billplz_id', $transaction['billplz_id']]])->update($transactionOnlineData);
OnlineTransactionLoggerService::logsAfterDBTransaction($transaction['billplz_id'], TransactionOnlineStatus::CRONJOB_UPDATE_TRANSAKSI_ONLINE, $transactionOnlineData, $transactionOnline);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($transaction['billplz_id'], TransactionOnlineStatus::CRONJOB_UPDATE_TRANSAKSI_ONLINE, $transactionOnlineData, $e->getMessage());
}
}
return response()->json('success');
@@ -246,8 +256,6 @@ class TransactionOnlineController extends Controller
// }
// $bilang_bln = $tempoh - $gadai['tempohbayar'];
// $transaction_upah = TransaksiKeuntungan::on('mysql7')->create([
// 'norujukan' => $norujukan,
// 'bayaran_keuntungan' => $upahsemasa,
@@ -265,7 +273,6 @@ class TransactionOnlineController extends Controller
// ]);
//
// DB::connection($cawangan['mysql'])->transaction(function () use($cawangan,$baki_pinjaman,$current,$norujukan,$gadai,$baki_hargajualan,$lelong_tawarruq,$margin_semasa){
// $margin_updated = ($baki_pinjaman / $gadai['nilaimarhun']) * 100;
@@ -309,7 +316,7 @@ class TransactionOnlineController extends Controller
// return response()->json("success",200);
// }
public function updateGadaiMarhunOnline($kodcaw, $norujukan, $bayaran, $paid_at, $tempohbayar)
public function updateGadaiMarhunOnline($kodcaw, $norujukan, $bayaran, $paid_at, $tempohbayar, $bill_id)
{
$current = Carbon::now();
$current = new Carbon();
@@ -343,9 +350,9 @@ class TransactionOnlineController extends Controller
try {
DB::connection('mysql7')->transaction(function () use ($norujukan, $gadai, $kodcaw, $current, $baki_hargajualan, $cawangan, $old_data, $lelong_tawarruq, $margin_semasa, $bayaran, $tempohbayar) {
DB::connection('mysql7')->transaction(function () use ($norujukan, $gadai, $kodcaw, $current, $baki_hargajualan, $cawangan, $old_data, $lelong_tawarruq, $margin_semasa, $bayaran, $tempohbayar, $bill_id) {
$transaction = Transaction::on('mysql7')->create([
$data = [
'trans_type' => 'A',
'norujukan' => $norujukan,
'nokp' => $gadai['nokp'],
@@ -354,7 +361,14 @@ class TransactionOnlineController extends Controller
'duit_masuk' => $bayaran,
'created_at' => $current,
'bakiharga' => $baki_hargajualan,
]);
];
try {
$transaction = Transaction::on('mysql7')->create($data);
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_TRANSACTION, $data, $transaction);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_TRANSACTION, $data, $e->getMessage());
}
if ($gadai['tempoh'] >= 12.0) {
$tempoh = 12;
@@ -368,7 +382,8 @@ class TransactionOnlineController extends Controller
$baki_bayaran = $bayaran - $upahsemasa;
$upahsemasa = $this->kiraupahTawarruq($kodcaw, $norujukan, $tempohbayar);
$upahrebet = $this->kiraUpahRebet($kodcaw, $norujukan, $tempohbayar);
$transaction_upah = TransaksiKeuntungan::on('mysql7')->create([
$dataTransactionUpah = [
'norujukan' => $norujukan,
'bayaran_keuntungan' => $upahsemasa,
'bayaran_pembiayaan' => $baki_bayaran,
@@ -382,7 +397,15 @@ class TransactionOnlineController extends Controller
'tempoh' => 0,
'beza_tempoh' => 0,
'margin_semasa' => 0,
]);
];
try {
$transaction_upah = TransaksiKeuntungan::on('mysql7')->create($dataTransactionUpah);
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_TRANSAKSI_KEUNTUNGAN, $dataTransactionUpah, $transaction_upah);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_TRANSAKSI_KEUNTUNGAN, $dataTransactionUpah, $e->getMessage());
}
} else {
$onepercent = new OnePercentServices();
@@ -404,7 +427,7 @@ class TransactionOnlineController extends Controller
$keun = $onepercent->getRoundedMethod($onepercentasal * $bilang_bln);
$keuntungan_rebate = $onepercent->getRoundedMethod($keuntungan['onepercent'] * $bilang_bln);
$transaction_upah = TransaksiKeuntungan::on('mysql7')->create([
$dataTransactionUpah = [
'norujukan' => $norujukan,
'bayaran_keuntungan' => $upahsemasa,
'bayaran_pembiayaan' => $baki_bayaran,
@@ -418,15 +441,22 @@ class TransactionOnlineController extends Controller
'tempoh' => $gadai['tempoh'],
'beza_tempoh' => $bilang_bln,
'margin_semasa' => $margin_semasa,
]);
];
try {
$transaction_upah = TransaksiKeuntungan::on('mysql7')->create($dataTransactionUpah);
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_TRANSAKSI_KEUNTUNGAN, $dataTransactionUpah, $transaction_upah);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_TRANSAKSI_KEUNTUNGAN, $dataTransactionUpah, $e->getMessage());
}
}
$baki_pinjaman = $gadai['bakipjm'] - $baki_bayaran;
DB::connection($cawangan['mysql'])->transaction(function () use ($cawangan, $baki_pinjaman, $current, $norujukan, $gadai, $baki_hargajualan, $lelong_tawarruq, $margin_semasa) {
DB::connection($cawangan['mysql'])->transaction(function () use ($cawangan, $baki_pinjaman, $current, $norujukan, $gadai, $baki_hargajualan, $lelong_tawarruq, $margin_semasa, $bill_id) {
$margin_updated = ($baki_pinjaman / $gadai['nilaimarhun']) * 100;
$update_gadai = Gadai::on($cawangan['mysql'])->where('norujukan', '=', $norujukan)->update(array(
$updateGadaiData = [
'bakipjm' => $baki_pinjaman,
'jbg' => 0,
't_update' => $current->toDateString(),
@@ -434,27 +464,41 @@ class TransactionOnlineController extends Controller
'tempohbayar' => $gadai['tempoh'],
'lelong_tawarruq' => $lelong_tawarruq,
'margin_semasa' => $margin_updated,
));
];
try {
$update_gadai = Gadai::on($cawangan['mysql'])->where('norujukan', '=', $norujukan)->update($updateGadaiData);
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_GADAI, $updateGadaiData, $update_gadai);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_UPDATE_GADAI, $updateGadaiData, $e->getMessage());
}
});
$new_data = Gadai::on($cawangan['mysql'])->where('norujukan', '=', $norujukan)->first();
$audit = new Audit();
$audit->users = 'Online';
$audit->actions = 'Bayaran Ansuran';
$audit->norujukan = $norujukan;
$audit->new_data = $new_data;
$audit->old_data = $old_data;
$audit->kodcaw = $kodcaw;
$audit->created_at = $current;
$audit->updated_at = $current;
$audit->save();
$auditData = [
'users' => 'Online',
'actions' => 'Bayaran Ansuran',
'norujukan' => $norujukan,
'new_data' => $new_data,
'old_data' => $old_data,
'kodcaw' => $kodcaw,
'created_at' => $current,
'updated_at' => $current,
];
try {
$audit = Audit::create($auditData);
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_REGISTER_AUDIT, $auditData, $audit);
} catch (\Exception $e) {
OnlineTransactionLoggerService::logsAfterDBTransaction($bill_id, TransactionOnlineStatus::CRONJOB_REGISTER_AUDIT, $auditData, $e->getMessage());
}
if (!$transaction || !$transaction_upah) {
throw new \Exception('One of the database operations failed.');
}
DB::commit();
});
} catch (\Exception $e) {
@@ -491,7 +535,7 @@ class TransactionOnlineController extends Controller
'nowakil' => 0,
'hubungan' => 0,
'status' => 0,
'historygadaian' => $norujukan
'historygadaian' => $norujukan,
]);
return response()->json($create_advansur, 201);
@@ -541,7 +585,7 @@ class TransactionOnlineController extends Controller
{
$transaction = TransactionOnline::on('mysql7')->where('billplz_id', '=', $request->billplz_id)->update(array(
'status' => $request->status,
'paid_at' => $request->paid_at
'paid_at' => $request->paid_at,
));
return response()->json($transaction, 200);
@@ -554,7 +598,6 @@ class TransactionOnlineController extends Controller
$gadai_all = [];
$akanlelongarray = [];
foreach ($cawangan_all as $index => $cawangan) {
$gadai = Gadai::on($cawangan['mysql'])
->where([['sttebus', '=', ''], ['taglel', 0], ['nokp', '=', $request->ic]])
@@ -571,7 +614,7 @@ class TransactionOnlineController extends Controller
}
$array_utg = new \Illuminate\Http\Request([
'jeniskeuntungan' => $jenis
'jeniskeuntungan' => $jenis,
]);
$result = (new TebusController)->upahTawarruq($gad['kodcaw'], $gad['norujukan'], $array_utg);
@@ -606,7 +649,7 @@ class TransactionOnlineController extends Controller
}
$array_utg = new \Illuminate\Http\Request([
'jeniskeuntungan' => $jenis
'jeniskeuntungan' => $jenis,
]);
$result = (new TebusController)->kiraupahTawarruq($lelong['kodcaw'], $lelong['norujukan'], $array_utg);
@@ -619,7 +662,7 @@ class TransactionOnlineController extends Controller
return response()->json(
array(
'gadai' => $gadai_all,
'lelong' => $akanlelongarray
'lelong' => $akanlelongarray,
),
200
);
@@ -628,7 +671,7 @@ class TransactionOnlineController extends Controller
public function updateTagPortal(Request $request)
{
$transaction = TransactionOnline::on('mysql7')->where('billplz_id', '=', $request->billplz_id)->update(array(
'tagportal' => 1
'tagportal' => 1,
));
return response()->json($transaction, 200);
@@ -639,7 +682,7 @@ class TransactionOnlineController extends Controller
try {
$gadai = (new GadaiController())->showOneGadaibyRujukanAndCawangan($kodcaw, $norujukan)
->getData()[0];
->getData()[0];
$jenis_keuntungan = $gadai->tagbaru === 1 ? 'onepercent' : 'asal';
@@ -650,8 +693,8 @@ class TransactionOnlineController extends Controller
$upah_rebet_tawarruq = (new TebusController())->upahRebetTawarruq($kodcaw, $norujukan, $request_upah_rebet_tawarruq);
if ($jenis_keuntungan === 'onepercent') {
$ujrah_sebenar = (float)$upah_tawarruq['ujrah'];
$ujrah_rebet = $ujrah_sebenar - (float)$upah_rebet_tawarruq['ujrah'];
$ujrah_sebenar = (float) $upah_tawarruq['ujrah'];
$ujrah_rebet = $ujrah_sebenar - (float) $upah_rebet_tawarruq['ujrah'];
return [
'ujrah_sebenar' => $ujrah_sebenar,
@@ -660,29 +703,29 @@ class TransactionOnlineController extends Controller
}
return [
'ujrah_sebenar' => (float)$upah_tawarruq,
'ujrah_rebet' => (float)$upah_rebet_tawarruq,
'ujrah_sebenar' => (float) $upah_tawarruq,
'ujrah_rebet' => (float) $upah_rebet_tawarruq,
];
} catch (\Throwable $th) {
Log::error($th);
return $th;
}
}
function getListTransactionOnlineTrail(Request $request)
public function getListTransactionOnlineTrail(Request $request)
{
$date = $request->date ? $request->date : Carbon::now()->toDateString();
$date = $request->date ? $request->date : Carbon::now()->toDateString();
$isGroupByNorujukan = $request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1';
$transactionsOnline = TransactionOnline::whereDate('tarikh', $date)
->when($request->filled('norujukan'), function ($query) use($request) {
->when($request->filled('norujukan'), function ($query) use ($request) {
return $query->where('norujukan', $request->norujukan);
})
->orderBy('tarikh', 'desc')
->orderBy('masa', 'desc')
->get()
->filter(fn ($x) => $x['status'] === 'PAID')
->filter(fn($x) => $x['status'] === 'PAID')
->when($isGroupByNorujukan, function ($query) {
return $query->groupBy('norujukan')->sortKeysDesc();
})
@@ -690,7 +733,7 @@ class TransactionOnlineController extends Controller
$transaction = Transaction::whereDate('created_at', $date)
->where('teller', 'Online')
->when($request->norujukan, function ($query) use($request) {
->when($request->norujukan, function ($query) use ($request) {
return $query->where('norujukan', $request->norujukan);
})
->orderBy('created_at', 'desc')
@@ -701,7 +744,7 @@ class TransactionOnlineController extends Controller
->toArray();
$transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date)
->when($request->norujukan, function ($query) use($request) {
->when($request->norujukan, function ($query) use ($request) {
return $query->where('norujukan', $request->norujukan);
})
->orderBy('tarikh_bayaran', 'desc')
@@ -720,17 +763,17 @@ class TransactionOnlineController extends Controller
->all();
$connectionCawangan = Cawangan::on('mysql7')->whereIn('kodcaw', $cawanganTransactionOnline)->get()->pluck('mysql');
$glDetail = $connectionCawangan->map(fn ($x) => GlDetail::on($x)->where('teller', 'ONLINE')->whereDate('tarikh', $date)->get())
$glDetail = $connectionCawangan->map(fn($x) => GlDetail::on($x)->where('teller', 'ONLINE')->whereDate('tarikh', $date)->get())
->flatten()
->when($isGroupByNorujukan, function ($glDetail) {
return $glDetail->groupBy('descpt')
->keyBy(function ($group, $key) {
$array = explode(' ', $key);
return end($array);
});
->keyBy(function ($group, $key) {
$array = explode(' ', $key);
return end($array);
});
})
->when($request->filled('norujukan'), function ($glDetail) use($request) {
->when($request->filled('norujukan'), function ($glDetail) use ($request) {
return $glDetail->filter(fn($x) => strpos($x->descpt, $request->norujukan) !== false);
})
->sortKeysDesc()
@@ -740,7 +783,7 @@ class TransactionOnlineController extends Controller
'transactionsOnline' => $transactionsOnline,
'transaction' => $transaction,
'transaksiKeuntungan' => $transaksiKeuntungan,
'glDetail' => $glDetail
'glDetail' => $glDetail,
]);
}
}
}