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
+7
View File
@@ -186,6 +186,13 @@ class OnePercent extends MasterServices
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){
$tebus = new Penebusan($this->kodcaw,$this->cawangan_info);
$response = $tebus->kiraupahUjrahOnePercent($this->kodcaw,$norujukan);
+65 -77
View File
@@ -947,21 +947,14 @@ class Penebusan
$array_trans_base = $request->only(['pinjaman','teller']);
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();
$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')->transaction(function () use ($kodcaw,$norujukan,$gadai,$array_tebus_base,$array_trans_base) {
$this->saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base);
$this->createTransactionBase($norujukan,$kodcaw,$array_trans_base);
// });
$this->handleFailOverTransaction($kodcaw,'done',$norujukan,$request->teller,$failover_response['id']);
$this->saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base);
$this->createTransactionBase($norujukan,$kodcaw,$array_trans_base);
$array_response = [
'result' => 'success',
'data' => 1
@@ -973,10 +966,6 @@ class Penebusan
return response()->json($array_response);
}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('mysql7')->rollBack();
$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 = new Carbon();
@@ -1004,6 +993,11 @@ class Penebusan
$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{
//check duplicate
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first();
@@ -1011,8 +1005,40 @@ class Penebusan
if(!empty($data)){
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){
$current = Carbon::now();
$current = new Carbon();
/*
Rebet Still looking for the calculation
*/
$rebet = 0;
$harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$array_tebus['jeniskeuntungan']);
$upah_tebus = $this->kiraupahTawarruq($norujukan);
$upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan);
$array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan);
try{
$onepercent_rebet = $array_onepercent_rebet['onepercent'] - $upah_rebet['onepercent'];
@@ -1088,7 +1110,12 @@ class Penebusan
private function saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base){
$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;
@@ -1122,14 +1149,22 @@ class Penebusan
'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([
'trans_type' => $array_tebus_base['jenistebus'],
'norujukan' => $norujukan,
'nokp' => $gadai['nokp'],
'teller' => $array_tebus_base['teller'],
'kodcaw' => $kodcaw,
'duit_masuk' => $array_tebus_base['totalbayaran'],
'duit_masuk' => $duit_masuk,
'created_at' => $current,
'bakiharga' => $baki_hargajualan,
'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();
/* Create Gadai */
@@ -1173,7 +1208,11 @@ class Penebusan
$karatbaru = $marhunloop['karat'];
$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']));
@@ -1269,8 +1308,6 @@ class Penebusan
'tag_tebus' => $array_trans['jenistebus'],
));
$this->handleFailOverTransaction($kodcaw,'update',$new_sag_number,$array_trans['teller'],$fail_id);
}catch(\Exception $e){
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();
$unit_current = isset($komuditi_current['unit_komuditi']) ? $komuditi_current['unit_komuditi']: 0;
throw new \Exception('testis');
try{
$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;
}
}
}