added test for tebus AT and P and added P

This commit is contained in:
hafifierahman
2024-11-25 01:31:05 +08:00
parent 3f4d0412df
commit 51aaa20078
9 changed files with 407 additions and 103 deletions
+1 -1
View File
@@ -598,7 +598,7 @@ class LelongController extends Controller
if($cawangan['tagarrahnbid'] == 1){ if($cawangan['tagarrahnbid'] == 1){
if(env('APP_ENV') != 'production'){ if(env('APP_ENV') != 'production'){
$link = 'http://adminbid.arrahn/api/portalApi'; $link = 'http://niklah.arrahn.com.my/api/portalApi';
}else{ }else{
$link = 'http://adminbid.arrahn/api/portalApi'; $link = 'http://adminbid.arrahn/api/portalApi';
} }
+7 -10
View File
@@ -182,6 +182,13 @@ class TebusController extends Controller
return $response; return $response;
} }
public function tebusUpdateTambahPinjaman($kodcaw,$norujukan,Request $request){
$master = new MasterServices($kodcaw);
$response = $master->tebusUpdateTambahPinjaman($kodcaw,$norujukan,$request);
return $response;
}
public function getLaporanTebus($kodcaw,$tarikh){ public function getLaporanTebus($kodcaw,$tarikh){
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
@@ -2000,14 +2007,4 @@ class TebusController extends Controller
return $response; return $response;
} }
public function tebusTransaksiUpdate($kodcaw,$norujukan,Request $request){
$master = new MasterServices($kodcaw);
$response = $master->tebusTransaksiUpdate($kodcaw,$norujukan,$request);
return $response;
}
} }
+6 -13
View File
@@ -223,6 +223,12 @@ class MasterServices
return $response; return $response;
} }
public function tebusUpdateTambahPinjaman($kodcaw,$norujukan,HttpRequest $request){
$onepercent = new OnePercentEngine($this->cawangan);
$response = $onepercent->tebusUpdateAutoTawarruq($kodcaw,$norujukan,$request);
return $response;
}
public function kiraupahUjrahOnePercent($kodcaw,$norujukan){ public function kiraupahUjrahOnePercent($kodcaw,$norujukan){
$response = $this->engine->kiraupahUjrahOnePercent($kodcaw,$norujukan); $response = $this->engine->kiraupahUjrahOnePercent($kodcaw,$norujukan);
@@ -247,19 +253,6 @@ class MasterServices
} }
} }
public function tebusTransaksiUpdate($kodcaw,$norujukan,HttpRequest $request){
if($request->jeniskeuntungan == 'onepercent'){
$onepercent = new OnePercentEngine($this->cawangan);
$response = $onepercent->tebusTransaksiUpdate($kodcaw,$norujukan,$request);
}else{
$tawarruq = new TawarruqEngine($this->cawangan);
$response = $tawarruq->tebusTransaksiUpdate($kodcaw,$norujukan,$request);
}
return $response;
}
/* End Penebusan */ /* End Penebusan */
public function test(){ public function test(){
+7
View File
@@ -186,6 +186,13 @@ class OnePercent extends MasterServices
return $response; return $response;
} }
public function tebusUpdateTambahPinjaman($kodcaw,$norujukan,HttpRequest $request){
$tebus = new Penebusan($this->kodcaw,$this->cawangan_info);
$response = $tebus->transaksiTambahPembiayaan($this->kodcaw,$norujukan,$request);
return $response;
}
public function kiraupahUjrahOnePercent($kodcaw,$norujukan){ public function kiraupahUjrahOnePercent($kodcaw,$norujukan){
$tebus = new Penebusan($this->kodcaw,$this->cawangan_info); $tebus = new Penebusan($this->kodcaw,$this->cawangan_info);
$response = $tebus->kiraupahUjrahOnePercent($this->kodcaw,$norujukan); $response = $tebus->kiraupahUjrahOnePercent($this->kodcaw,$norujukan);
+65 -77
View File
@@ -947,21 +947,14 @@ class Penebusan
$array_trans_base = $request->only(['pinjaman','teller']); $array_trans_base = $request->only(['pinjaman','teller']);
try{ try{
$failover_response = $this->handleFailOverTransaction($kodcaw,'create',$norujukan,$request->teller);
// DB::connection($cawangan['mysql'])->transaction(function () use ($failover_response,$kodcaw,$norujukan,$gadai,$cawangan,$array_tebus,$array_trans) {
DB::connection($cawangan['mysql'])->beginTransaction(); DB::connection($cawangan['mysql'])->beginTransaction();
$this->saveTebus($kodcaw,$norujukan,$gadai,$cawangan,$array_tebus); $this->saveTebus($kodcaw,$norujukan,$gadai,$cawangan,$array_tebus);
$this->createTransaction($cawangan,$kodcaw,$norujukan,$array_trans,$failover_response['id']); $this->createTransaction($cawangan,$kodcaw,$norujukan,$array_trans);
// });
DB::connection('mysql7')->beginTransaction(); DB::connection('mysql7')->beginTransaction();
// DB::connection('mysql7')->transaction(function () use ($kodcaw,$norujukan,$gadai,$array_tebus_base,$array_trans_base) { $this->saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base);
$this->saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base); $this->createTransactionBase($norujukan,$kodcaw,$array_trans_base);
$this->createTransactionBase($norujukan,$kodcaw,$array_trans_base);
// });
$this->handleFailOverTransaction($kodcaw,'done',$norujukan,$request->teller,$failover_response['id']);
$array_response = [ $array_response = [
'result' => 'success', 'result' => 'success',
'data' => 1 'data' => 1
@@ -973,10 +966,6 @@ class Penebusan
return response()->json($array_response); return response()->json($array_response);
}catch(\Exception $e){ }catch(\Exception $e){
if (isset($failover_response['id'])) {
$this->handleFailOverTransaction($kodcaw,'fail',$norujukan,$request->teller,$failover_response['id'],$e->getCode(),$e->getMessage());
}
DB::connection($cawangan['mysql'])->rollBack(); DB::connection($cawangan['mysql'])->rollBack();
DB::connection('mysql7')->rollBack(); DB::connection('mysql7')->rollBack();
$array_response = [ $array_response = [
@@ -996,7 +985,7 @@ class Penebusan
} }
private function transaksiTambahPembiayaan($kodcaw,$norujukan,HttpRequest $request){ public function transaksiTambahPembiayaan($kodcaw,$norujukan,HttpRequest $request){
$current = Carbon::now(); $current = Carbon::now();
$current = new Carbon(); $current = new Carbon();
@@ -1004,6 +993,11 @@ class Penebusan
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first(); $gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
$array_tebus = $request->only(['jeniskeuntungan', 'nopelanggan','jenistebus','addpinjaman','nowakil','marhun','teller']);
$array_trans = $request->only(['nopelanggan', 'noic','pinjaman','marhun','teller','jenistebus']);
$array_tebus_base = $request->only(['totalbayaran', 'bakiupah','jeniskeuntungan','bakipinjaman','jenistebus','teller','nowakil','duitpelanggan']);
$array_trans_base = $request->only(['pinjaman','teller']);
try{ try{
//check duplicate //check duplicate
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first(); $data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first();
@@ -1011,8 +1005,40 @@ class Penebusan
if(!empty($data)){ if(!empty($data)){
return 'duplicate'; return 'duplicate';
} }
}catch(\Exception $e){
DB::connection($cawangan['mysql'])->beginTransaction();
$this->saveTebus($kodcaw,$norujukan,$gadai,$cawangan,$array_tebus);
$this->createTransaction($cawangan,$kodcaw,$norujukan,$array_trans);
DB::connection('mysql7')->beginTransaction();
$this->saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base);
$this->createTransactionBase($norujukan,$kodcaw,$array_trans_base);
$array_response = [
'result' => 'success',
'data' => 1
];
DB::connection($cawangan['mysql'])->commit();
DB::connection('mysql7')->commit();
return response()->json($array_response);
}catch(\Exception $e){
DB::connection($cawangan['mysql'])->rollBack();
DB::connection('mysql7')->rollBack();
$array_response = [
'result' => 'error',
'data' => $e->getMessage()
];
Log::error('Transaction failed', [
'exception' => $e->getMessage(),
'line' => $e->getLine(),
'file' => $e->getFile(),
]);
return response()->json($array_response);
} }
} }
@@ -1038,17 +1064,13 @@ class Penebusan
private function saveTebus($kodcaw,$norujukan,$gadai,$cawangan,$array_tebus){ private function saveTebus($kodcaw,$norujukan,$gadai,$cawangan,$array_tebus){
$current = Carbon::now(); $current = Carbon::now();
$current = new Carbon();
/* /*
Rebet Still looking for the calculation Rebet Still looking for the calculation
*/ */
$rebet = 0; $rebet = 0;
$harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$array_tebus['jeniskeuntungan']); $harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$array_tebus['jeniskeuntungan']);
$upah_tebus = $this->kiraupahTawarruq($norujukan); $upah_tebus = $this->kiraupahTawarruq($norujukan);
$upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan); $upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan);
$array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan); $array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan);
try{ try{
$onepercent_rebet = $array_onepercent_rebet['onepercent'] - $upah_rebet['onepercent']; $onepercent_rebet = $array_onepercent_rebet['onepercent'] - $upah_rebet['onepercent'];
@@ -1088,7 +1110,12 @@ class Penebusan
private function saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base){ private function saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base){
$current = Carbon::now(); $current = Carbon::now();
$bayaran_pembiayaan = $array_tebus_base['totalbayaran'] - $array_tebus_base['bakiupah'];
if($array_tebus_base['jenistebus'] == 'AT'){
$bayaran_pembiayaan = $array_tebus_base['totalbayaran'] - $array_tebus_base['bakiupah'];
}else{
$bayaran_pembiayaan = $array_tebus_base['bakipinjaman'];
}
$margin_semasa = ($gadai['bakipjm']/$gadai['nilaimarhun']) * 100; $margin_semasa = ($gadai['bakipjm']/$gadai['nilaimarhun']) * 100;
@@ -1122,14 +1149,22 @@ class Penebusan
'beza_tempoh' => ($gadai['tempoh'] - $gadai['tempohbayar']), 'beza_tempoh' => ($gadai['tempoh'] - $gadai['tempohbayar']),
]); ]);
$baki_hargajualan = $gadai['bakihargajualan'] - $array_tebus_base['bakipinjaman']; if($array_tebus_base['jenistebus'] == 'P'){
$duit_masuk = $array_tebus_base['bakiupah'];
}else if($array_tebus_base['jenistebus'] == 'AT'){
$duit_masuk = $array_tebus_base['totalbayaran'];
}else{
$duit_masuk = $harga_tebus['harga'];
}
$baki_hargajualan = ($array_tebus_base['jenistebus'] == 'P') ? $gadai['bakihargajualan'] = $array_tebus_base['bakiupah'] : $gadai['bakihargajualan'] - $array_tebus_base['bakipinjaman'];
Transaction::on('mysql7')->create([ Transaction::on('mysql7')->create([
'trans_type' => $array_tebus_base['jenistebus'], 'trans_type' => $array_tebus_base['jenistebus'],
'norujukan' => $norujukan, 'norujukan' => $norujukan,
'nokp' => $gadai['nokp'], 'nokp' => $gadai['nokp'],
'teller' => $array_tebus_base['teller'], 'teller' => $array_tebus_base['teller'],
'kodcaw' => $kodcaw, 'kodcaw' => $kodcaw,
'duit_masuk' => $array_tebus_base['totalbayaran'], 'duit_masuk' => $duit_masuk,
'created_at' => $current, 'created_at' => $current,
'bakiharga' => $baki_hargajualan, 'bakiharga' => $baki_hargajualan,
'nowakil' => (int)$array_tebus_base['nowakil'], 'nowakil' => (int)$array_tebus_base['nowakil'],
@@ -1141,7 +1176,7 @@ class Penebusan
} }
} }
private function createTransaction($cawangan,$kodcaw,$norujukan,$array_trans,$fail_id = 0){ private function createTransaction($cawangan,$kodcaw,$norujukan,$array_trans){
$current = Carbon::now(); $current = Carbon::now();
/* Create Gadai */ /* Create Gadai */
@@ -1173,7 +1208,11 @@ class Penebusan
$karatbaru = $marhunloop['karat']; $karatbaru = $marhunloop['karat'];
$harga_emas = HargaEmas::on('mysql7')->select('harga')->where('karat','=',$karatbaru)->first(); $harga_emas = HargaEmas::on('mysql7')->select('harga')->where('karat','=',$karatbaru)->first();
$harga = ($array_trans['jenisAT'] == 'hargalama') ? $marhunloop['harga'] : $harga_emas['harga']; if(isset($array_trans['jenisAT'])){
$harga = ($array_trans['jenisAT'] == 'hargalama') ? $marhunloop['harga'] : $harga_emas['harga'];
}else{
$harga = $harga_emas['harga'];
}
$nilai_marhun = (floatval($harga) * floatval($marhunloop['berat'])); $nilai_marhun = (floatval($harga) * floatval($marhunloop['berat']));
@@ -1269,8 +1308,6 @@ class Penebusan
'tag_tebus' => $array_trans['jenistebus'], 'tag_tebus' => $array_trans['jenistebus'],
)); ));
$this->handleFailOverTransaction($kodcaw,'update',$new_sag_number,$array_trans['teller'],$fail_id);
}catch(\Exception $e){ }catch(\Exception $e){
throw new \Exception("Error in Transaction: " . $e->getMessage()); throw new \Exception("Error in Transaction: " . $e->getMessage());
} }
@@ -1283,7 +1320,6 @@ class Penebusan
$komuditi_current = KomuditiPurchase::on('mysql7')->where('date_purchase','=',$current->toDateString())->orderBy('created_at','desc')->first(); $komuditi_current = KomuditiPurchase::on('mysql7')->where('date_purchase','=',$current->toDateString())->orderBy('created_at','desc')->first();
$unit_current = isset($komuditi_current['unit_komuditi']) ? $komuditi_current['unit_komuditi']: 0; $unit_current = isset($komuditi_current['unit_komuditi']) ? $komuditi_current['unit_komuditi']: 0;
throw new \Exception('testis');
try{ try{
$update_unit = $unit_current - $array_trans_base['pinjaman']; $update_unit = $unit_current - $array_trans_base['pinjaman'];
@@ -1306,53 +1342,5 @@ class Penebusan
} }
} }
private function handleFailOverTransaction($kodcaw,$status,$norujukan,$teller,$fail_id = 0,$code_error = 500,$error_message = ''){
$current = Carbon::now();
if($status == 'create'){
return FailoverTransaction::on('mysql7')->create([
'kodcaw' => $kodcaw,
'teller' => $teller,
'old_norujukan' => $norujukan,
'new_norujukan' => null,
'db_caw' => false,
'db_online' => false,
'status' => 'pending'
]);
}else if($status == 'update'){
return FailoverTransaction::on('mysql7')->where('id',$fail_id)->update([
'new_norujukan' => $norujukan,
'db_caw' => true,
'db_online' => false,
'status' => 'pending'
]);
}else if($status == 'done'){
return FailoverTransaction::on('mysql7')->where('id',$fail_id)->where('old_norujukan',$norujukan)->update([
'db_caw' => true,
'db_online' => true,
'status' => 'resolved',
'resolve_time' => $current
]);
}else{
FailoverTransaction::on('mysql7')->where('id',$fail_id)->where('old_norujukan',$norujukan)->update([
'old_norujukan' => $norujukan,
'status' => 'failed',
]);
FailoverTransactionFailed::on('mysql7')->create([
'original_id' => $fail_id,
'kodcaw' => $kodcaw,
'norujukan' => $norujukan,
'code_error' => $code_error,
'error_message' => $error_message,
]);
return;
}
}
} }
+1 -1
View File
@@ -150,7 +150,7 @@ $router->group(['prefix'=>'api'], function () use ($router){
$router->put('updatetebus/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusUpdate']); $router->put('updatetebus/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusUpdate']);
$router->put('updateautotawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusUpdateAutoTawarruq']); $router->put('updateautotawarruq/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusUpdateAutoTawarruq']);
$router->get('listpenebusanhistory/{kodcaw}',['uses'=>'TebusController@listhistorypenebusan']); $router->get('listpenebusanhistory/{kodcaw}',['uses'=>'TebusController@listhistorypenebusan']);
$router->post('updatetransaksi/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusTransaksiUpdate']); $router->put('updatetambahpinjaman/{kodcaw}/{norujukan}',['uses'=>'TebusController@tebusUpdateTambahPinjaman']);
//API FARIS //API FARIS
$router->put('tebus/serah_marhun_teller/{kodcaw}/{norujukan}',['uses'=>'GadaiController@barcodescanTebus']); $router->put('tebus/serah_marhun_teller/{kodcaw}/{norujukan}',['uses'=>'GadaiController@barcodescanTebus']);
// $router->get('tebus_serahan/{kodcaw}',['uses'=>'TebusController@SerahMarhunTeller']); // $router->get('tebus_serahan/{kodcaw}',['uses'=>'TebusController@SerahMarhunTeller']);
+42 -1
View File
@@ -1,7 +1,8 @@
<?php <?php
use Laravel\Lumen\Testing\TestCase as BaseTestCase; use Laravel\Lumen\Testing\TestCase as BaseTestCase;
use Illuminate\Support\Facades\DB;
use PHPUnit\Framework\Assert as PHPUnit;
abstract class TestCase extends BaseTestCase abstract class TestCase extends BaseTestCase
{ {
/** /**
@@ -13,4 +14,44 @@ abstract class TestCase extends BaseTestCase
{ {
return require __DIR__.'/../bootstrap/app.php'; return require __DIR__.'/../bootstrap/app.php';
} }
protected function assertDatabaseHasThroughNorujukan(string $table, array $data, string $connection = null): void
{
$query = DB::connection($connection)->table($table);
foreach ($data as $key => $value) {
$query->where($key, $value);
}
$record = $query->first();
if (!$record) {
// Check if a record exists but doesn't match the expected attributes
$actualRecord = DB::connection($connection)->table($table)->where('norujukan', $data['norujukan'])->first();
if ($actualRecord) {
$mismatchedColumns = [];
foreach ($data as $key => $value) {
if ($actualRecord->$key !== $value) {
$expectedValue = stripslashes($value); // Remove backslashes from expected
$mismatchedColumns[$key] = [
'expected' => $expectedValue,
'actual' => $actualRecord->$key,
];
}
}
PHPUnit::fail(
"A record exists in the table [{$table}] but does not match the expected attributes. " .
"Mismatched columns: " . json_encode($mismatchedColumns)
);
}
PHPUnit::fail(
"Failed asserting that a record exists in the table [{$table}] with the attributes " . json_encode($data)
);
}
PHPUnit::assertNotNull($record, "Record exists and matches the expected attributes.");
}
} }
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace Tests\Traits;
use Illuminate\Support\Facades\DB;
trait DatabaseTransactions
{
/**
* Database connections to use for transactions.
*
* @var array
*/
protected array $connections = ['mysql','mysql7'];
/**
* Begin transactions on all specified database connections.
*/
protected function setUp(): void
{
parent::setUp();
foreach ($this->connections as $connection) {
DB::connection($connection)->beginTransaction();
}
}
/**
* Rollback transactions on all specified database connections.
*/
protected function tearDown(): void
{
foreach ($this->connections as $connection) {
DB::connection($connection)->rollBack();
}
parent::tearDown();
}
/**
* Set the database connections for transactions.
*
* @param string|array $connections
* @return void
*/
protected function setTransactionConnections(array $connections): void
{
$this->connections = $connections;
}
}
+228
View File
@@ -0,0 +1,228 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Tests\Traits\DatabaseTransactions;
use App\Cawangan;
use App\Gadai;
use App\Support\v2\Penebusan as V2Penebusan;
use Carbon\Carbon;
class TransactionTest extends TestCase
{
use DatabaseTransactions;
public function testTransactionAT(){
$cawangan = Cawangan::on('mysql7')->where('kodcaw', 'KB2')->first();
$this->setTransactionConnections([$cawangan['mysql'], 'mysql7']);
$current = new Carbon();
$array_test = [
'norujukan' => 'KB2240327-0009',
"nopelanggan" => "M03-00133879",
"jenistebus" => "AT",
"jbg" => 6.5,
"kadarupah" => 0.56,
"pinjaman_lama" => 2000,
"pinjaman" => 2000,
"ansuran" => 0,
"addpinjaman" => 0,
"bakipinjaman" => 2221,
"bakiupah" => 221,
"historygadaian" => "KB2240327-0009",
"marhun" => "1 R/L,",
"kuantiti_marhun" => 1,
"total_berat" => 8.5,
"kadarkeuntungan" => 0.56,
"noic" => "980412035872",
"jenisbayarantebus" => "nottawarruq",
"teller" => "MOHD KHALID ABDUL RAHMAN",
"jeniskeuntungan" => "onepercent",
"nilai_marhun" => 2943.21,
"jenisAT" => "none",
"totalbayaran" => 221,
"bayaran" => 300,
"bakipelanggan" => 79,
"nowakil" => 0,
"total_nilai_marhun" => 3171.265,
"marhun_detail" => "1 R/L,",
];
// Create a mock request
$request = new Request($array_test);
$penebusan_services = new V2Penebusan('KB2',$cawangan);
$response = $penebusan_services->transaksiPembiayaanSemula('KB2','KB2240327-0009',$request);
$responseArray = json_decode($response->getContent(), true);
$this->assertIsArray($responseArray, 'Response is not an array');
$this->assertEquals('success', $responseArray['result'], 'Result should be success');
$this->assertEquals(1, $responseArray['data'], 'Data should be 1');
/* Tebus Assert */
$this->assertDatabaseHasThroughNorujukan('tebus', [
'kodcaw'=> "KB2",
'norujukan'=> "KB2240327-0009",
'nopelanggan' => "M03-00133879",
'jenisbyr' => "TN",
'jenistebus' => "A",
'glcode' => "0",
't_tebus' => $current->toDateString(),
'jbg' => "6.50",
'kadarupah' => "0.56",
'nilaimarhun' => "2943.21",
'pinjaman' => "2000.00",
'ansuran' => "0.00",
'addpinjaman' => 0,
'bakipjm' => "2221",
'bakiupah' => "221",
'terima' => "*",
'kodgl' => "0",
'nowakil' => 0,
'rebate' => 0,
'marhuntebus' => "1 R/L,",
'historygadaian' => "KB2240327-0009",
'tarikhbyrn' => $current->toDateString(),
'teller' => "MOHD KHALID ABDUL RAHMAN",
'ujrah' => 0,
'onepercent' => 0,
], $cawangan['mysql']);
$this->assertDatabaseHasThroughNorujukan('gadai', [
'norujukan' => 'KB2240327-0009',
'sttebus' => 'T'
], $cawangan['mysql']);
}
public function testTransactionP(){
$cawangan = Cawangan::on('mysql7')->where('kodcaw', 'KB2')->first();
$this->setTransactionConnections([$cawangan['mysql'], 'mysql7']);
$current = new Carbon();
$array_test = [
'norujukan' => 'KB2240327-0009',
'nopelanggan' => 'M03-00133879',
'jenistebus' => 'P',
'jbg' => 6.5,
'kadarupah' => 0.56,
'pinjaman_lama' => 2000,
'pinjaman' => 2010,
'ansuran' => 0,
'addpinjaman' => 10,
'bakipinjaman' => 2221,
'bakiupah' => 221,
'history_gadaian' => 'KB2240327-0009',
'marhun' => '1 R/L,',
'kuantiti_marhun' => 1,
'total_berat' => 8.5,
'kadarkeuntungan' => 0.56,
"noic" => "980412035872",
'jenisbayarantebus' => 'tawarruq',
"teller" => "MOHD KHALID ABDUL RAHMAN",
'jeniskeuntungan' => 'onepercent',
'nilai_marhun' => 3171.265,
// 'jenisAT' => 'Tiada',
// 'totalbayaran' => 'Tiada',
'bayaran' => 222,
'bakipelanggan' => 1,
'nowakil' => 0, //Sebenar Tiada Kena Add dalam series
// 'total_nilai_marhun' => 'Tiada',
'keuntungan_6bln' => 6753.6,
'keuntungan_sebulan' => 1125.6,
// 'marhun_detail' => 'Tiada',
];
// Create a mock request
$request = new Request($array_test);
$penebusan_services = new V2Penebusan('KB2',$cawangan);
$response = $penebusan_services->transaksiTambahPembiayaan('KB2','KB2240327-0009',$request);
$responseArray = json_decode($response->getContent(), true);
$this->assertIsArray($responseArray, 'Response is not an array');
$this->assertEquals('success', $responseArray['result'], 'Result should be success');
$this->assertEquals(1, $responseArray['data'], 'Data should be 1');
/* Tebus Assert */
$this->assertDatabaseHasThroughNorujukan('tebus', [
'kodcaw'=> "KB2",
'norujukan'=> "KB2240327-0009",
'nopelanggan' => "M03-00133879",
'jenisbyr' => "TN",
'jenistebus' => "P",
'glcode' => "0",
't_tebus' => $current->toDateString(),
'jbg' => "6.50",
'kadarupah' => "0.56",
'nilaimarhun' => "2943.21",
'pinjaman' => "2000.00",
'ansuran' => "0.00",
'addpinjaman' => "10.00",
'bakipjm' => "2221.00",
'bakiupah' => "221.00",
'terima' => "*",
'kodgl' => "0",
'nowakil' => 0,
'rebate' => "0.00",
'marhuntebus' => "1 R/L,",
'historygadaian' => "KB2240327-0009",
'tarikhbyrn' => $current->toDateString(),
'teller' => "MOHD KHALID ABDUL RAHMAN",
'ujrah' => "91.00",
'onepercent' => "130.00",
], $cawangan['mysql']);
/* Gadai Assert */
/* Create Gadai */
$gadaiTransaction = Gadai::on($cawangan['mysql'])->where('t_gadai','=',$current->toDateString())->orderBy('sirig', 'desc')->first();
$gadaiTransaction = optional($gadaiTransaction)->toArray();
/* Gadai Baru */
$this->assertDatabaseHasThroughNorujukan('gadai',[
'kodcaw'=>'KB2',
'norujukan' => $gadaiTransaction['norujukan'],
'nopelanggan' => "M03-00133879",
"nokp" => "980412035872",
'sirig' => $gadaiTransaction['sirig'],
't_gadai' => $current->toDateString(),
'sttebus' => '',
'masa' =>$current->toTimeString(),
'tagbaru' => 1,
'nilaimarhun' => "3171.27",
'berat'=> "0.00",
'pinjaman' => "2010.00",
'kadarupah' => "0.56",
// 'marhun' => "1 R\/L,",
'percentpinj' => "0.63",
'teller' => "MOHD KHALID ABDUL RAHMAN",
'bakipjm' => "2010.00",
'bakiupah' => "121.50",
'jbg' => "0.50",
't_update' => $current->toDateString(),
'cetak' => 0,
'upah12' => "243.00",
'hargajualan' => "2253.00",
'bakihargajualan' => "2253.00",
'tagserah' => 0,
't_matang' => "2025-05-24",
't_matang1' => "2025-11-24",
'tempoh' => "0.50",
'kuantiti' => 0,
'tagkomuditi' => 0,
'upahdibayar' => "0.00",
'tempohbayar' => 0.00,
'lelong_tawarruq' => 1,
'kadarujrah' => "0.56",
'ujrah' => "0.15",
'onepercent' => "20.10",
'margin_semasa' => "0.63",
'tagbaru' => 1,
'tunggakanujrah' => "0.05",
'tunggakanonepercent' => "10.05",
], $cawangan['mysql']);
$this->assertDatabaseHasThroughNorujukan('marhun',[
]);
}
}