1350 lines
54 KiB
PHP
1350 lines
54 KiB
PHP
<?php
|
|
|
|
namespace App\Support\v2;
|
|
|
|
use App\Advansur;
|
|
use App\Audit;
|
|
use App\Cawangan;
|
|
use App\KadarUpah;
|
|
use App\Support\v2\Calculation;
|
|
use Carbon\Carbon;
|
|
use App\Gadai;
|
|
use App\HargaEmas;
|
|
use App\InOutMar;
|
|
use App\KomuditiPurchase;
|
|
use App\KomuditiTransaksi;
|
|
use App\Marhun;
|
|
use App\FailoverTransaction;
|
|
use App\FailoverTransactionFailed;
|
|
use App\Moratorium;
|
|
use App\Support\OnePercent;
|
|
use App\Tebus;
|
|
use App\Transaction;
|
|
use App\TransaksiKeuntungan;
|
|
use Illuminate\Http\Request as HttpRequest;
|
|
|
|
use App\Support\v2\GadaiV2 as Version2Gadai;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use PDO;
|
|
|
|
class Penebusan
|
|
{
|
|
protected $kodcaw;
|
|
protected $cawangan_info;
|
|
|
|
public function __construct(String $kodcaw,Object $cawangan_info){
|
|
$this->kodcaw = $kodcaw;
|
|
$this->cawangan_info = $cawangan_info;
|
|
}
|
|
|
|
public function tebusTawarruq($kodcaw,$norujukan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$jeniskeuntungan = ($gadai_data['tagbaru'] == 1) ? 'onepercent' : 'asal';
|
|
|
|
$rebet = $this->rebetselepastawarruq($kodcaw,$norujukan,$jeniskeuntungan);
|
|
$harga_tebus = $gadai_data['bakihargajualan'] - $rebet;
|
|
|
|
// $hargatebus = round($harga_tebus,PHP_ROUND_HALF_UP);
|
|
// $hargatebus = bcdiv(round($harga_tebus,2),1,1);
|
|
// $hargatebus = number_format($hargatebus,2);
|
|
// if(strpos($hargatebus,',')){
|
|
// $hargatebus = str_replace(',','',$hargatebus);
|
|
// }
|
|
|
|
$hargatebus = $onepercentservices->getRoundedMethod($harga_tebus);
|
|
|
|
return response()->json($hargatebus);
|
|
}
|
|
|
|
public function hargaTebusTawarruq($kodcaw,$norujukan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$rebet = $this->rebetselepastawarruq($kodcaw,$norujukan);
|
|
|
|
$harga_tebus = $gadai_data['bakihargajualan'] - $rebet;
|
|
|
|
// $hargatebus = round($harga_tebus,PHP_ROUND_HALF_UP);
|
|
// $hargatebus = bcdiv(round($harga_tebus,2),1,1);
|
|
// $hargatebus = number_format($hargatebus,2);
|
|
// if(strpos($hargatebus,',')){
|
|
// $hargatebus = str_replace(',','',$hargatebus);
|
|
// }
|
|
|
|
$hargatebus = $onepercentservices->getRoundedMethod($harga_tebus);
|
|
|
|
$arrayharga = ['harga' => $hargatebus];
|
|
|
|
return $arrayharga;
|
|
}
|
|
|
|
public function kiraUpahRebetSebenar($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
$total_rebet = Transaction::on('mysql7')
|
|
->selectRaw('SUM(onepercent - onepercent_rebet) as onepercent, SUM(ujrah - ujrah_rebet) as ujrah')
|
|
->leftJoin('transaksi_keuntungan as trans', function($join)
|
|
{
|
|
$join->on('transaction.norujukan', '=', 'trans.norujukan');
|
|
$join->on('transaction.created_at', '=', 'trans.tarikh_bayaran');
|
|
})
|
|
->where('transaction.trans_type','A')
|
|
->where('trans.norujukan','=',$norujukan)->get()->toArray();
|
|
|
|
if(!empty($total_rebet))
|
|
return $total_rebet[0];
|
|
else
|
|
return 0.00;
|
|
}
|
|
|
|
public function upahTawarruq($kodcaw,$norujukan,$jeniskeuntungan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = $this->cawangan_info;
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
if($gadai_data['tempoh'] >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $gadai_data['tempoh'];
|
|
}
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
|
|
$upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']);
|
|
|
|
$keuntungan_semasa = $onepercentservices->getRoundedMethod($bilang_bln * $upah['onepercent']);
|
|
$ujrah_semasa = $onepercentservices->getRoundedMethod($bilang_bln * $upah['ujrah']);
|
|
$upahsemasa_raw = $keuntungan_semasa + $ujrah_semasa;
|
|
$upahsemasa_raw = $onepercentservices->getRoundedMethod($upahsemasa_raw);
|
|
$keuntungan_1bln = $onepercentservices->getRoundedMethod((1 * $upah['onepercent'])+(1 * $upah['ujrah']));
|
|
|
|
|
|
$array_upah =
|
|
[
|
|
'keuntungan_1bln' => $keuntungan_1bln,
|
|
'pendapatan' => $upahsemasa_raw,
|
|
'keuntungan' => $keuntungan_semasa,
|
|
'ujrah' => $ujrah_semasa
|
|
];
|
|
|
|
return $array_upah;
|
|
}
|
|
|
|
public function upahRebetTawarruq($kodcaw,$norujukan,$jeniskeuntungan){
|
|
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$this->kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
if($gadai_data['tempoh'] >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $gadai_data['tempoh'];
|
|
}
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
|
|
$upah = $onepercentservices->kiraanKeuntunganRebet($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']);
|
|
|
|
$upahrebet_raw = $onepercentservices->getRoundedMethod($bilang_bln * $upah['keuntungan']);
|
|
$upahujrah_raw = $onepercentservices->getRoundedMethod($bilang_bln * $upah['ujrah']);
|
|
$upahonepercent_raw = $onepercentservices->getRoundedMethod($bilang_bln * $upah['onepercent']);
|
|
|
|
$array_upah =
|
|
[
|
|
'pendapatan' => $upahrebet_raw,
|
|
'keuntungan' => $upahonepercent_raw,
|
|
'ujrah' => $upahujrah_raw
|
|
];
|
|
|
|
|
|
return $array_upah;
|
|
}
|
|
|
|
public function kiraupahTawarruq($norujukan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = $this->cawangan_info;
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
if($gadai_data['tempoh'] >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $gadai_data['tempoh'];
|
|
}
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
|
|
$upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']);
|
|
$onepercent = $onepercentservices->getRoundedMethod($bilang_bln * $upah['onepercent']);
|
|
$ujrah = $onepercentservices->getRoundedMethod($bilang_bln * $upah['ujrah']);
|
|
$upahsemasa_raw = $onepercentservices->getRoundedMethod($onepercent + $ujrah);
|
|
|
|
return $upahsemasa_raw;
|
|
}
|
|
|
|
public function tebusSeparuhTawarruq($kodcaw,$norujukan,HttpRequest $request){
|
|
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upahsemasa = $this->upahRebetTawarruq($kodcaw,$norujukan,$request->jeniskeuntungan);
|
|
|
|
$array_recno_marhun = $request->array_recno;
|
|
|
|
$margin_pembiayaan = round(($gadai_data['bakipjm']/$gadai_data['nilaimarhun'])*100,2);
|
|
// $margin_pembiayaan = round(($gadai_data['bakipjm']/$request->hargasemasa)*100,2);
|
|
|
|
$total_harga_tebus = 0;
|
|
foreach($array_recno_marhun as $recno){
|
|
$marhun = Marhun::on($cawangan['mysql'])->where([['recno','=',$recno],['norujukan','=',$norujukan]])->first();
|
|
|
|
$harga_tebus = ($margin_pembiayaan/100)*$marhun['n_marhun'];
|
|
|
|
$total_harga_tebus += $harga_tebus;
|
|
}
|
|
// $total_harga_tebus = $onepercentservices->getRoundedMethod($total_harga_tebus);
|
|
// $totalhargatebus = $total_harga_tebus + $upahsemasa['keuntungan'];
|
|
|
|
$total_harga_tebus_round = round($total_harga_tebus,2);
|
|
|
|
$totalhargatebus = substr($total_harga_tebus_round, 0, -1);
|
|
|
|
return response()->json($totalhargatebus);
|
|
}
|
|
|
|
public function tebusNotTawarruq($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upah_semasa = $this->kiraUpahNotTawarruq($kodcaw,$norujukan);
|
|
|
|
$harga_tebus = $upah_semasa + $gadai_data['pinjaman'];
|
|
|
|
return response()->json($harga_tebus);
|
|
}
|
|
|
|
public function hargaTebusNotTawarruq($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upah_semasa = $this->kiraUpahNotTawarruq($kodcaw,$norujukan);
|
|
|
|
$harga_tebus = $upah_semasa + $gadai_data['pinjaman'];
|
|
|
|
return $harga_tebus;
|
|
}
|
|
|
|
public function kiraUpahNotTawarruq($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upahtelahbayar = Advansur::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->sum('upahdibayar');
|
|
|
|
$upah_asal = $gadai_data['nilaimarhun'] / 100 * $gadai_data['kadarupah'];
|
|
$margin_pinjaman = $gadai_data['pinjaman'] / $gadai_data['nilaimarhun'] * 100;
|
|
$margin_kadarupah = 80;
|
|
$rebet = ($margin_kadarupah-$margin_pinjaman)/$margin_kadarupah * $upah_asal;
|
|
|
|
$bln_mora = Moratorium::first();
|
|
|
|
$upah_sebenar = $upah_asal - $rebet;
|
|
$bln_upah = $gadai_data['tempoh'];
|
|
if($bln_upah > $bln_mora['bln_mora']){
|
|
$bln_upah = $bln_mora['bln_mora'];
|
|
}
|
|
$upahsemasa = $upah_sebenar * $bln_upah;
|
|
$upah_semasa = bcdiv(round($upahsemasa,2),1,1);
|
|
$upah_semasa = number_format($upah_semasa,2);
|
|
if(strpos($upah_semasa,',')){
|
|
$upah_semasa = str_replace(',','',$upah_semasa);
|
|
}
|
|
$upah_semasa = (float)$upah_semasa - $upahtelahbayar;
|
|
|
|
if($upah_semasa <= 0){
|
|
$upah_semasa = 0;
|
|
}
|
|
|
|
return $upah_semasa;
|
|
}
|
|
|
|
public function upahNotTawarruq($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upahtelahbayar = Advansur::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->sum('upahdibayar');
|
|
|
|
$upah_asal = $gadai_data['nilaimarhun'] / 100 * $gadai_data['kadarupah'];
|
|
$margin_pinjaman = $gadai_data['pinjaman'] / $gadai_data['nilaimarhun'] * 100;
|
|
$margin_kadarupah = 80;
|
|
$rebet = ($margin_kadarupah-$margin_pinjaman)/$margin_kadarupah * $upah_asal;
|
|
|
|
$bln_mora = Moratorium::first();
|
|
|
|
$upah_sebenar = $upah_asal - $rebet;
|
|
$bln_upah = $gadai_data['tempoh'];
|
|
if($bln_upah > $bln_mora['bln_mora']){
|
|
$bln_upah = $bln_mora['bln_mora'];
|
|
}
|
|
$upahsemasa = $upah_sebenar * $bln_upah;
|
|
$upah_semasa = bcdiv(round($upahsemasa,2),1,1);
|
|
$upah_semasa = number_format($upah_semasa,2);
|
|
if(strpos($upah_semasa,',')){
|
|
$upah_semasa = str_replace(',','',$upah_semasa);
|
|
}
|
|
$upah_semasa = (float)$upah_semasa - $upahtelahbayar;
|
|
|
|
if($upah_semasa <= 0){
|
|
$upah_semasa = 0;
|
|
}
|
|
|
|
return response()->json($upah_semasa);
|
|
}
|
|
|
|
public function tebusSeparuhNotTawarruq($kodcaw,$norujukan,HttpRequest $request){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upah_asal = $gadai_data['nilaimarhun'] / 100 * $gadai_data['kadarupah'];
|
|
$margin_pinjaman = $gadai_data['pinjaman'] / $gadai_data['nilaimarhun'] * 100;
|
|
$margin_kadarupah = 80;
|
|
$rebet = ($margin_kadarupah-$margin_pinjaman)/$margin_kadarupah * $upah_asal;
|
|
|
|
$upah_sebenar = $upah_asal - $rebet;
|
|
|
|
$upah_semasa = bcdiv(round($upah_sebenar * $gadai_data['jbg'],2),1,1);
|
|
$upah_semasa = (float)number_format($upah_semasa,2);
|
|
|
|
$array_recno_marhun = $request->array_recno;
|
|
|
|
$margin_pembiayaan = round(($gadai_data['pinjaman']/$gadai_data['nilaimarhun'])*100,2);
|
|
|
|
$nilai_marhun = $gadai_data['nilaimarhun'];
|
|
$total_harga_tebus = 0;
|
|
foreach($array_recno_marhun as $recno){
|
|
$marhun = Marhun::on($cawangan['mysql'])->where([['recno','=',$recno],['norujukan','=',$norujukan]])->first();
|
|
|
|
$harga_tebus = ($margin_pembiayaan/100)*$marhun['n_marhun'];
|
|
|
|
$total_harga_tebus += $harga_tebus;
|
|
}
|
|
|
|
// $total_harga_tebus += $upah_semasa;
|
|
|
|
return response()->json($total_harga_tebus);
|
|
}
|
|
|
|
function rebet($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$upah_asal = $gadai_data['nilaimarhun'] / 100 * $gadai_data['kadarupah'];
|
|
$margin_pinjaman = $gadai_data['pinjaman'] / $gadai_data['nilaimarhun'] * 100;
|
|
$margin_kadarupah = 80;
|
|
|
|
$rebet = ($margin_kadarupah-$margin_pinjaman)/$margin_kadarupah * $upah_asal;
|
|
|
|
return floatval(number_format($rebet,2));
|
|
}
|
|
|
|
function rebetselepastawarruq($kodcaw,$norujukan){
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$transaction_keuntungan = TransaksiKeuntungan::on('mysql7')
|
|
->where('norujukan','=',$norujukan)
|
|
->sum('keuntungan_rebet');
|
|
|
|
$upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan);
|
|
|
|
$rebet_raw =$gadai_data['upah12'] - $transaction_keuntungan - $upah_rebet;
|
|
|
|
return $rebet_raw;
|
|
}
|
|
|
|
public function kiraupahRebet($kodcaw,$norujukan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = Cawangan::on('mysql7')
|
|
->where('kodcaw','=',$this->kodcaw)
|
|
->first();
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
if($gadai_data['tempoh'] >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $gadai_data['tempoh'];
|
|
}
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
|
|
$upah = $onepercentservices->kiraanKeuntunganRebet($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']);
|
|
|
|
$ujrah = $onepercentservices->getRoundedMethod($bilang_bln * $upah['ujrah']);
|
|
$onepercent = $onepercentservices->getRoundedMethod($bilang_bln * $upah['onepercent']);
|
|
$keuntungan = $ujrah + $onepercent;
|
|
|
|
$upahrebet_raw = $onepercentservices->getRoundedMethod($keuntungan);
|
|
|
|
return $upahrebet_raw;
|
|
}
|
|
|
|
public function tebusUpdate($kodcaw,$norujukan,HttpRequest $request){
|
|
$current = Carbon::now();
|
|
$current = new Carbon();
|
|
|
|
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
|
|
|
if($request->jenisbayarantebus == "tawarruq"){
|
|
$rebet = $this->rebetselepastawarruq($kodcaw,$norujukan,$request->jeniskeuntungan);
|
|
}
|
|
else if($request->jenisbayarantebus == "nottawarruq")
|
|
{
|
|
$rebet = $this->rebet($kodcaw,$norujukan);
|
|
}
|
|
else{
|
|
$rebet = 0;
|
|
}
|
|
|
|
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
|
|
|
|
//check duplicate
|
|
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->whereIn('trans_type', ['P', 'T', 'S'])->first();
|
|
|
|
if(!empty($data)){
|
|
return response()->json('duplicate');
|
|
}
|
|
|
|
$ujrah=0;$onepercent=0;$rounded=0;
|
|
if($gadai['hargajualan'] == null){
|
|
$harga_tebus = $this->hargaTebusNotTawarruq($kodcaw,$norujukan);
|
|
$upah_tebus = $this->kiraUpahNotTawarruq($kodcaw,$norujukan);
|
|
$upah_rebet = 0;
|
|
$upah_rebet_sebenar = 0;
|
|
}else{
|
|
$harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$request->jeniskeuntungan);
|
|
$upah_tebus = $this->kiraupahTawarruq($norujukan);
|
|
$upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan);
|
|
$upah_rebet_sebenar = $harga_tebus['harga'] - $gadai['bakipjm'];
|
|
|
|
if($request->jeniskeuntungan == 'onepercent'){
|
|
$array_onepercent = $this->kiraupahUjrahOnePercent($kodcaw,$norujukan);
|
|
$array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan);
|
|
$onepercent_rebet = $array_onepercent_rebet['onepercent'] - $upah_rebet['onepercent'];
|
|
$ujrah_rebet = $array_onepercent_rebet['ujrah'] - $upah_rebet['ujrah'];
|
|
|
|
$margin_semasa = ($gadai['bakipjm']/$gadai['nilaimarhun']) * 100;
|
|
$ujrah = $array_onepercent['ujrah'];
|
|
$onepercent = $array_onepercent['onepercent'];
|
|
}
|
|
}
|
|
|
|
|
|
$create_tebus = Tebus::on($cawangan['mysql'])->create([
|
|
'kodcaw'=> $kodcaw,
|
|
'norujukan'=> $norujukan,
|
|
'nopelanggan' => $request->nopelanggan,
|
|
'jenisbyr' => "TN",
|
|
'jenistebus' => $request->jenistebus,
|
|
'glcode' => "0",
|
|
't_tebus' => $current->toDateString(),
|
|
'jbg' => $gadai['tempoh'],
|
|
'kadarupah' => $gadai['kadarupah'],
|
|
'nilaimarhun' => $gadai['nilaimarhun'],
|
|
'pinjaman' => $gadai['pinjaman'],
|
|
'ansuran' => 0.00,
|
|
'addpinjaman' => $request->addpinjaman,
|
|
'bakipjm' => $harga_tebus['harga'],
|
|
'bakiupah' => $upah_tebus,
|
|
'terima' => "*",
|
|
'kodgl' => "0",
|
|
'nowakil' => $request->nowakil,
|
|
'rebate' => $rebet,
|
|
'marhuntebus' => $request->marhun,
|
|
'historygadaian' => $norujukan,
|
|
'tarikhbyrn' => $current->toDateString(),
|
|
'teller' => $request->teller,
|
|
'ujrah' => $ujrah_rebet,
|
|
'onepercent' => $onepercent_rebet,
|
|
]);
|
|
|
|
$create_inoutmar = InOutMar::on($cawangan['mysql'])->create([
|
|
'tarikh' => $current->toDateString(),
|
|
'masa' => $current->toTimeString(),
|
|
'norujukan' => $norujukan,
|
|
'nm' => $request->nilai_marhun,
|
|
'pkd' => $request->teller,
|
|
'drp' => $request->teller,
|
|
'bln' => $current->month,
|
|
'thn' => $current->year,
|
|
'tag' => 0,
|
|
'jenistebus' => $request->jenistebus,
|
|
'namateller' => $request->teller
|
|
]);
|
|
|
|
$transaction_upah = TransaksiKeuntungan::on('mysql7')->create([
|
|
'norujukan' => $norujukan,
|
|
'bayaran_keuntungan' => $upah_tebus,
|
|
'bayaran_pembiayaan' => $gadai['bakipjm'],
|
|
'keuntungan_rebet' => $upah_rebet_sebenar,
|
|
'tarikh_bayaran'=> $current,
|
|
'kodcaw'=> $kodcaw,
|
|
'ujrah' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent['ujrah'] : 0,
|
|
'ujrah_rebet' => ($request->jeniskeuntungan == 'onepercent') ? $ujrah_rebet : 0,
|
|
'onepercent' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent['onepercent'] : 0,
|
|
'onepercent_rebet' => ($request->jeniskeuntungan == 'onepercent') ? $onepercent_rebet : 0,
|
|
'margin_semasa' => ($request->jeniskeuntungan == 'onepercent') ? $margin_semasa : 0,
|
|
'tempoh' => $gadai['tempoh'],
|
|
'beza_tempoh' => ($gadai['tempoh'] - $gadai['tempohbayar']),
|
|
]);
|
|
|
|
if($request->jenistebus == 'P'){
|
|
$baki_hargajualan = $gadai['bakihargajualan'] - $request->bakiupah;
|
|
$transaction = Transaction::on('mysql7')->create([
|
|
'trans_type' => $request->jenistebus,
|
|
'norujukan' => $norujukan,
|
|
'nokp' => $gadai['nokp'],
|
|
'teller' => $request->teller,
|
|
'kodcaw' => $kodcaw,
|
|
'duit_masuk' => $request->bakiupah,
|
|
'created_at' => $current,
|
|
'bakiharga' => $baki_hargajualan,
|
|
'nowakil' => (int)$request->nowakil,
|
|
'duitpelanggan' => isset($request->duitpelanggan) ? $request->duitpelanggan : 0,
|
|
'bakipelanggan' => $request->bakipelanggan
|
|
]);
|
|
}else{
|
|
$baki_hargajualan = $gadai['bakihargajualan'] - $request->bakipinjaman;
|
|
$transaction = Transaction::on('mysql7')->create([
|
|
'trans_type' => $request->jenistebus,
|
|
'norujukan' => $norujukan,
|
|
'nokp' => $gadai['nokp'],
|
|
'teller' => $request->teller,
|
|
'kodcaw' => $kodcaw,
|
|
'duit_masuk' => $harga_tebus['harga'],
|
|
'created_at' => $current,
|
|
'bakiharga' => $baki_hargajualan,
|
|
'nowakil' => (int)$request->nowakil,
|
|
'duitpelanggan' => isset($request->duitpelanggan) ? $request->duitpelanggan : 0,
|
|
'bakipelanggan' => $request->bakipelanggan
|
|
]);
|
|
}
|
|
|
|
$update_gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->update(array(
|
|
'sttebus' => "T",
|
|
't_update' => $current->toDateString(),
|
|
));
|
|
|
|
$audit = new Audit();
|
|
$audit->users = $request->teller;
|
|
if($request->jenistebus == 'P'){
|
|
$audit->actions = "Tambah Pembiayaan";
|
|
}else if($request->jenistebus == 'S'){
|
|
$audit->actions = "Tebus Separuh";
|
|
}else if($request->jenistebus == 'T'){
|
|
$audit->actions = "Tebus Penuh";
|
|
}
|
|
$audit->norujukan = $norujukan;
|
|
$audit->new_data = $create_tebus;
|
|
$audit->kodcaw = $kodcaw;
|
|
$audit->created_at = $current;
|
|
$audit->updated_at = $current;
|
|
$audit->save();
|
|
|
|
return response()->json($update_gadai, 201);
|
|
}
|
|
|
|
public function tebusUpdateAutoTawarruq($kodcaw,$norujukan,HttpRequest $request){
|
|
$current = Carbon::now();
|
|
$current = new Carbon();
|
|
|
|
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
|
|
|
if($request->jenisbayarantebus == "tawarruq")
|
|
{
|
|
$rebet = $this->rebetselepastawarruq($kodcaw,$norujukan);
|
|
}
|
|
else if($request->jenisbayarantebus == "nottawarruq")
|
|
{
|
|
$rebet = $this->rebet($kodcaw,$norujukan);
|
|
}
|
|
else{
|
|
$rebet = 0;
|
|
}
|
|
|
|
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
|
|
|
|
//check duplicate
|
|
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first();
|
|
|
|
if(!empty($data)){
|
|
return response()->json('duplicate');
|
|
}
|
|
|
|
$ujrah=0;$onepercent=0;$rounded=0;
|
|
if($gadai['hargajualan'] == null){
|
|
$harga_tebus = $this->hargaTebusNotTawarruq($kodcaw,$norujukan);
|
|
$upah_tebus = $this->kiraUpahNotTawarruq($kodcaw,$norujukan);
|
|
$upah_rebet = 0;
|
|
$upah_rebet_sebenar = 0;
|
|
}else{
|
|
$harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$request->jeniskeuntungan);
|
|
$upah_tebus = $this->kiraupahTawarruq($norujukan);
|
|
$upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan);
|
|
$upah_rebet_sebenar = $harga_tebus['harga'] - $gadai['bakipjm'];
|
|
|
|
if($request->jeniskeuntungan == 'onepercent'){
|
|
$array_onepercent = $this->kiraupahUjrahOnePercent($kodcaw,$norujukan);
|
|
$array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan);
|
|
|
|
$onepercent_rebet = $array_onepercent_rebet['onepercent'] - $upah_rebet['onepercent'];
|
|
$ujrah_rebet = $array_onepercent_rebet['ujrah'] - $upah_rebet['ujrah'];
|
|
|
|
$margin_semasa = ($gadai['bakipjm']/$gadai['nilaimarhun']) * 100;
|
|
$ujrah = $array_onepercent['ujrah'];
|
|
$onepercent = $array_onepercent['onepercent'];
|
|
}
|
|
}
|
|
|
|
$update_gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->update(array(
|
|
'sttebus' => "T",
|
|
't_update' => $current->toDateString(),
|
|
));
|
|
|
|
// $upah_rebet = $this->kiraUpahRebet($kodcaw,$norujukan);
|
|
|
|
$create_tebus = Tebus::on($cawangan['mysql'])->create([
|
|
'kodcaw'=> $kodcaw,
|
|
'norujukan'=> $norujukan,
|
|
'nopelanggan' => $request->nopelanggan,
|
|
'jenisbyr' => "TN",
|
|
'jenistebus' => $request->jenistebus,
|
|
'glcode' => "0",
|
|
't_tebus' => $current->toDateString(),
|
|
'jbg' => $gadai['tempoh'],
|
|
'kadarupah' => $gadai['kadarupah'],
|
|
'nilaimarhun' => $gadai['nilaimarhun'],
|
|
'pinjaman' => $gadai['pinjaman'],
|
|
'ansuran' => 0.00,
|
|
'addpinjaman' => $request->addpinjaman,
|
|
'bakipjm' => $harga_tebus['harga'],
|
|
'bakiupah' => $upah_tebus,
|
|
'terima' => "*",
|
|
'kodgl' => "0",
|
|
'nowakil' => $request->nowakil,
|
|
'rebate' => $rebet,
|
|
'marhuntebus' => $request->marhun,
|
|
'historygadaian' => $norujukan,
|
|
'tarikhbyrn' => $current->toDateString(),
|
|
'teller' => $request->teller,
|
|
'ujrah' => $ujrah_rebet,
|
|
'onepercent' => $onepercent_rebet,
|
|
]);
|
|
|
|
$create_inoutmar = InOutMar::on($cawangan['mysql'])->create([
|
|
'tarikh' => $current->toDateString(),
|
|
'masa' => $current->toTimeString(),
|
|
'norujukan' => $norujukan,
|
|
'nm' => $request->nilai_marhun,
|
|
'pkd' => $request->teller,
|
|
'drp' => $request->teller,
|
|
'bln' => $current->month,
|
|
'thn' => $current->year,
|
|
'tag' => 0,
|
|
'jenistebus' => $request->jenistebus,
|
|
'namateller' => $request->teller
|
|
]);
|
|
|
|
$bayaran_pembiayaan = $request->totalbayaran - $request->bakiupah;
|
|
|
|
$transaction_upah = TransaksiKeuntungan::on('mysql7')->create([
|
|
'norujukan' => $norujukan,
|
|
'bayaran_keuntungan' => $upah_tebus,
|
|
'bayaran_pembiayaan' => $bayaran_pembiayaan,
|
|
'keuntungan_rebet' => $upah_rebet_sebenar,
|
|
'tarikh_bayaran'=> $current,
|
|
'kodcaw'=> $kodcaw,
|
|
'ujrah' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent['ujrah'] : 0,
|
|
'ujrah_rebet' => ($request->jeniskeuntungan == 'onepercent') ? $ujrah_rebet : 0,
|
|
'onepercent' => ($request->jeniskeuntungan == 'onepercent') ? $array_onepercent['onepercent'] : 0,
|
|
'onepercent_rebet' => ($request->jeniskeuntungan == 'onepercent') ? $onepercent_rebet : 0,
|
|
'margin_semasa' => ($request->jeniskeuntungan == 'onepercent') ? $margin_semasa : 0,
|
|
'tempoh' => $gadai['tempoh'],
|
|
'beza_tempoh' => ($gadai['tempoh'] - $gadai['tempohbayar']),
|
|
]);
|
|
|
|
$baki_hargajualan = $gadai['bakihargajualan'] - $request->bakipinjaman;
|
|
$transaction = Transaction::on('mysql7')->create([
|
|
'trans_type' => $request->jenistebus,
|
|
'norujukan' => $norujukan,
|
|
'nokp' => $gadai['nokp'],
|
|
'teller' => $request->teller,
|
|
'kodcaw' => $kodcaw,
|
|
'duit_masuk' => $request->totalbayaran,
|
|
'created_at' => $current,
|
|
'bakiharga' => $baki_hargajualan,
|
|
'nowakil' => (int)$request->nowakil,
|
|
'duitpelanggan' => isset($request->duitpelanggan) ? $request->duitpelanggan : 0,
|
|
'bakipelanggan' => isset($request->bakipelanggan) ? $request->bakipelanggan : 0
|
|
]);
|
|
|
|
$audit = new Audit();
|
|
$audit->users = $request->teller;
|
|
$audit->actions = "Pembiayaan Semula";
|
|
$audit->norujukan = $norujukan;
|
|
$audit->new_data = $create_tebus;
|
|
$audit->kodcaw = $kodcaw;
|
|
$audit->created_at = $current;
|
|
$audit->updated_at = $current;
|
|
$audit->save();
|
|
|
|
return response()->json($update_gadai, 201);
|
|
}
|
|
|
|
public function kiraupahUjrahOnePercent($kodcaw,$norujukan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = $this->cawangan_info;
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
if($gadai_data['tempoh'] >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $gadai_data['tempoh'];
|
|
}
|
|
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
$array_upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']);
|
|
$onepercent = $onepercentservices->getRoundedMethod($array_upah['onepercent']);
|
|
$ujrah = $onepercentservices->getRoundedMethod($array_upah['ujrah']);
|
|
$onepercent_semasa = $bilang_bln * $onepercent;
|
|
$ujrah_semasa = $bilang_bln * $ujrah;
|
|
$onepercent_semasa = $onepercentservices->getRoundedMethod($onepercent_semasa);
|
|
$ujrah_semasa = $onepercentservices->getRoundedMethod($ujrah_semasa);
|
|
|
|
|
|
return ['ujrah' => $ujrah_semasa, 'onepercent' => $onepercent_semasa];
|
|
}
|
|
|
|
public function kiraupahUjrahOnePercentRebate($kodcaw,$norujukan){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = $this->cawangan_info;
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
if($gadai_data['tempoh'] >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $gadai_data['tempoh'];
|
|
}
|
|
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
$array_upah = $onepercentservices->kiraanKeuntunganRebet($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']);
|
|
// $ujrah_rounded = $onepercentservices->getRoundedMethod($array_upah['ujrah']);
|
|
// $keuntungan_rounded = $onepercentservices->getRoundedMethod($array_upah['onepercent']);
|
|
$ujrah = $bilang_bln * $array_upah['ujrah'];
|
|
$onepercent = $bilang_bln * $array_upah['onepercent'];
|
|
$ujrah = $onepercentservices->getRoundedMethod($ujrah);
|
|
$onepercent = $onepercentservices->getRoundedMethod($onepercent);
|
|
|
|
return ['ujrah' => $ujrah, 'onepercent' => $onepercent];
|
|
}
|
|
|
|
public function kiraupahTawarruqByTarikh($kodcaw,$norujukan,$tarikh){
|
|
$onepercentservices = new Calculation();
|
|
|
|
$cawangan = $this->cawangan_info;
|
|
|
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$norujukan)
|
|
->first();
|
|
|
|
$transaction_keuntungan = TransaksiKeuntungan::on('mysql7')
|
|
->where('norujukan','=',$norujukan)
|
|
->sum('keuntungan_rebet');
|
|
|
|
$tempoh_func = $this->kiraanTarikhJBG($gadai_data['t_gadai'],$tarikh);
|
|
|
|
if($tempoh_func >= 12.0){
|
|
$tempoh = 12;
|
|
}else{
|
|
$tempoh = $tempoh_func;
|
|
}
|
|
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
|
|
|
/* Keuntungan Sebenar */
|
|
$upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']);
|
|
|
|
$keuntungan_semasa = $onepercentservices->getRoundedMethod($bilang_bln * $upah['onepercent']);
|
|
$ujrah_semasa = $onepercentservices->getRoundedMethod($bilang_bln * $upah['ujrah']);
|
|
$upahsemasa_raw = $keuntungan_semasa + $ujrah_semasa;
|
|
$upahsemasa_raw = $onepercentservices->getRoundedMethod($upahsemasa_raw);
|
|
$keuntungan_1bln = $onepercentservices->getRoundedMethod((1 * $upah['onepercent'])+(1 * $upah['ujrah']));
|
|
|
|
/* Keuntungan Rebet */
|
|
$upah_rebet_kira = $onepercentservices->kiraanKeuntunganRebet($gadai_data['bakipjm'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['margin_semasa']);
|
|
|
|
$ujrah = $onepercentservices->getRoundedMethod($bilang_bln * $upah_rebet_kira['ujrah']);
|
|
$onepercent = $onepercentservices->getRoundedMethod($bilang_bln * $upah_rebet_kira['onepercent']);
|
|
$keuntungan = $ujrah + $onepercent;
|
|
|
|
$upahrebet_raw = $onepercentservices->getRoundedMethod($keuntungan);
|
|
|
|
$rebet_raw =$gadai_data['upah12'] - $transaction_keuntungan - $upahrebet_raw;
|
|
|
|
$harga_tebus = $gadai_data['bakihargajualan'] - $rebet_raw;
|
|
|
|
$array_return = [
|
|
'keuntungan_1bln' => $keuntungan_1bln,
|
|
'pendapatan' => $upahsemasa_raw,
|
|
'keuntungan' => $keuntungan_semasa,
|
|
'ujrah' => $ujrah_semasa,
|
|
'keuntungan_rebet' => $onepercent,
|
|
'ujrah_rebet' => $ujrah,
|
|
'tempoh' => $tempoh,
|
|
'harga_tebus' => $harga_tebus,
|
|
];
|
|
|
|
return $array_return;
|
|
}
|
|
|
|
private function kiraanTarikhJBG($tarikhgadai,$tarikh){
|
|
|
|
$tarikh_gadai = Carbon::parse($tarikhgadai. ' 00:00:00');
|
|
$tarikh = new Carbon($tarikh);
|
|
$tahun_gadai = $tarikh_gadai->year;
|
|
$bulan_gadai = $tarikh_gadai->month;
|
|
$hari_gadai = $tarikh_gadai->day;
|
|
$tahun_semasa = $tarikh->year;
|
|
$bulan_semasa = $tarikh->month;
|
|
$hari_semasa = $tarikh->day;
|
|
if($hari_semasa >= $hari_gadai){
|
|
$beza_hari = $hari_semasa - $hari_gadai + 1;
|
|
}else if($hari_semasa < $hari_gadai){
|
|
$bulan_semasa = $bulan_semasa - 1;
|
|
$beza_hari = ($hari_semasa + 30) - $hari_gadai + 1;
|
|
}
|
|
$extensivemonth_gadai = 0;
|
|
if($beza_hari >= 1 && $beza_hari <= 15){
|
|
$extensivemonth_gadai = 0.5;
|
|
}else if($beza_hari >= 16){
|
|
$extensivemonth_gadai = 1;
|
|
}else{
|
|
$extensivemonth_gadai = 0;
|
|
}
|
|
$beza_tahun = $tahun_semasa - $tahun_gadai;
|
|
$beza_bulan = ($bulan_semasa + ($beza_tahun * 12)) - $bulan_gadai;
|
|
$tempoh_gadai = $beza_bulan + $extensivemonth_gadai;
|
|
|
|
return $tempoh_gadai;
|
|
}
|
|
|
|
|
|
public function transaksiPembiayaanSemula($kodcaw,$norujukan,HttpRequest $request){
|
|
|
|
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
|
|
|
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
|
|
$gadai = optional($gadai)->toArray();
|
|
|
|
//check duplicate
|
|
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first();
|
|
|
|
if(!empty($data)){
|
|
return 'duplicate';
|
|
}
|
|
|
|
if(!$gadai){
|
|
return 'gadai no-data';
|
|
}
|
|
|
|
$array_tebus = $request->only(['jeniskeuntungan', 'nopelanggan','jenistebus','addpinjaman','nowakil','marhun','teller']);
|
|
$array_trans = $request->only(['nopelanggan', 'noic','jenisAT','pinjaman','pinjamanbaru','marhun','teller','jenistebus']);
|
|
$array_tebus_base = $request->only(['totalbayaran', 'bakiupah','jeniskeuntungan','bakipinjaman','jenistebus','teller','nowakil','duitpelanggan']);
|
|
$array_trans_base = $request->only(['pinjaman','teller','pinjamanbaru']);
|
|
|
|
try{
|
|
|
|
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);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public function transaksiTambahPembiayaan($kodcaw,$norujukan,HttpRequest $request){
|
|
$current = Carbon::now();
|
|
$current = new Carbon();
|
|
|
|
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
|
|
|
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
|
|
$gadai = optional($gadai)->toArray();
|
|
|
|
//check duplicate
|
|
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first();
|
|
|
|
if(!empty($data)){
|
|
return 'duplicate';
|
|
}
|
|
|
|
$array_tebus = $request->only(['jeniskeuntungan', 'nopelanggan','jenistebus','addpinjaman','nowakil','marhun','teller']);
|
|
$array_trans = $request->only(['nopelanggan', 'noic','pinjaman','pinjamanbaru','marhun','teller','jenistebus']);
|
|
$array_tebus_base = $request->only(['totalbayaran', 'bakiupah','jeniskeuntungan','bakipinjaman','jenistebus','teller','nowakil','duitpelanggan']);
|
|
$array_trans_base = $request->only(['pinjaman','teller','pinjamanbaru']);
|
|
|
|
try{
|
|
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);
|
|
}
|
|
}
|
|
|
|
private function transaksiPenyelesaianSebahagian($kodcaw,$norujukan,HttpRequest $request){
|
|
$current = Carbon::now();
|
|
$current = new Carbon();
|
|
|
|
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
|
|
|
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
|
|
|
|
try{
|
|
//check duplicate
|
|
$data = Transaction::on('mysql7')->where('norujukan','=',$norujukan)->where('trans_type','=','AT')->first();
|
|
|
|
if(!empty($data)){
|
|
return 'duplicate';
|
|
}
|
|
}catch(\Exception $e){
|
|
|
|
}
|
|
}
|
|
|
|
private function saveTebus($kodcaw,$norujukan,$gadai,$cawangan,$array_tebus){
|
|
$current = Carbon::now();
|
|
/*
|
|
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'];
|
|
$ujrah_rebet = $array_onepercent_rebet['ujrah'] - $upah_rebet['ujrah'];
|
|
|
|
Tebus::on($cawangan['mysql'])->create([
|
|
'kodcaw'=> $kodcaw,
|
|
'norujukan'=> $norujukan,
|
|
'nopelanggan' => $array_tebus['nopelanggan'],
|
|
'jenisbyr' => "TN",
|
|
'jenistebus' => $array_tebus['jenistebus'],
|
|
'glcode' => "0",
|
|
't_tebus' => $current->toDateString(),
|
|
'jbg' => $gadai['tempoh'],
|
|
'kadarupah' => $gadai['kadarupah'],
|
|
'nilaimarhun' => $gadai['nilaimarhun'],
|
|
'pinjaman' => $gadai['pinjaman'],
|
|
'ansuran' => 0.00,
|
|
'addpinjaman' => $array_tebus['addpinjaman'],
|
|
'bakipjm' => $harga_tebus['harga'],
|
|
'bakiupah' => $upah_tebus,
|
|
'terima' => "*",
|
|
'kodgl' => "0",
|
|
'nowakil' => $array_tebus['nowakil'],
|
|
'rebate' => $rebet,
|
|
'marhuntebus' => $array_tebus['marhun'],
|
|
'historygadaian' => $norujukan,
|
|
'tarikhbyrn' => $current->toDateString(),
|
|
'teller' => $array_tebus['teller'],
|
|
'ujrah' => $ujrah_rebet,
|
|
'onepercent' => $onepercent_rebet,
|
|
]);
|
|
}catch(\Exception $e){
|
|
throw new \Exception("Error in Tebus: " . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
private function saveTebusBase($kodcaw,$norujukan,$gadai,$array_tebus_base){
|
|
$current = Carbon::now();
|
|
|
|
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;
|
|
|
|
$harga_tebus = $this->hargaTebusTawarruq($kodcaw,$norujukan,$array_tebus_base['jeniskeuntungan']);
|
|
$upah_tebus = $this->kiraupahTawarruq($norujukan);
|
|
$array_onepercent = $this->kiraupahUjrahOnePercent($kodcaw,$norujukan);
|
|
$array_onepercent_rebet = $this->kiraupahUjrahOnePercentRebate($kodcaw,$norujukan);
|
|
$upah_rebet = $this->kiraUpahRebetSebenar($kodcaw,$norujukan);
|
|
|
|
$ujrah = $array_onepercent['ujrah'];
|
|
$onepercent = $array_onepercent['onepercent'];
|
|
$onepercent_rebet = $array_onepercent_rebet['onepercent'] - $upah_rebet['onepercent'];
|
|
$ujrah_rebet = $array_onepercent_rebet['ujrah'] - $upah_rebet['ujrah'];
|
|
|
|
$upah_rebet_sebenar = $harga_tebus['harga'] - $gadai['bakipjm'];
|
|
|
|
try{
|
|
TransaksiKeuntungan::on('mysql7')->create([
|
|
'norujukan' => $norujukan,
|
|
'bayaran_keuntungan' => $upah_tebus,
|
|
'bayaran_pembiayaan' => $bayaran_pembiayaan,
|
|
'keuntungan_rebet' => $upah_rebet_sebenar,
|
|
'tarikh_bayaran'=> $current,
|
|
'kodcaw'=> $kodcaw,
|
|
'ujrah' => ($array_tebus_base['jeniskeuntungan'] == 'onepercent') ? $ujrah : 0,
|
|
'ujrah_rebet' => ($array_tebus_base['jeniskeuntungan'] == 'onepercent') ? $ujrah_rebet : 0,
|
|
'onepercent' => ($array_tebus_base['jeniskeuntungan'] == 'onepercent') ? $onepercent : 0,
|
|
'onepercent_rebet' => ($array_tebus_base['jeniskeuntungan'] == 'onepercent') ? $onepercent_rebet : 0,
|
|
'margin_semasa' => ($array_tebus_base['jeniskeuntungan'] == 'onepercent') ? $margin_semasa : 0,
|
|
'tempoh' => $gadai['tempoh'],
|
|
'beza_tempoh' => ($gadai['tempoh'] - $gadai['tempohbayar']),
|
|
]);
|
|
|
|
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' => $duit_masuk,
|
|
'created_at' => $current,
|
|
'bakiharga' => $baki_hargajualan,
|
|
'nowakil' => (int)$array_tebus_base['nowakil'],
|
|
'duitpelanggan' => isset($array_tebus_base['duitpelanggan']) ? $array_tebus_base['duitpelanggan'] : 0,
|
|
'bakipelanggan' => isset($array_tebus_base['bakipelanggan']) ? $array_tebus_base['bakipelanggan'] : 0
|
|
]);
|
|
}catch(\Exception $e){
|
|
throw new \Exception("Error in TebusBase: " . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
private function createTransaction($cawangan,$kodcaw,$norujukan,$array_trans){
|
|
$current = Carbon::now();
|
|
|
|
/* Create Gadai */
|
|
$gadaiTransaction = Gadai::on($cawangan['mysql'])->where('t_gadai','=',$current->toDateString())->orderBy('sirig', 'desc')->first();
|
|
$gadaiTransaction = optional($gadaiTransaction)->toArray();
|
|
|
|
$new_sirig = ($gadaiTransaction) ? $gadaiTransaction['sirig'] + 1 : 1;
|
|
$curent_year = substr($current->year,2,2);
|
|
$curent_month = sprintf("%02d", $current->month);
|
|
$current_day = sprintf("%02d", $current->day);
|
|
|
|
$new_transaction = sprintf("%04d",$new_sirig);
|
|
$new_sag_number = strtoupper($cawangan['kodcaw']) . $curent_year . $curent_month . $current_day . '-' .$new_transaction;
|
|
|
|
try{
|
|
Gadai::on($cawangan['mysql'])->create([
|
|
'kodcaw'=>$kodcaw,
|
|
'norujukan' => $new_sag_number,
|
|
'nopelanggan' => $array_trans['nopelanggan'],
|
|
'nokp' => $array_trans['noic'],
|
|
'sirig' => $new_sirig,
|
|
't_gadai' => $current->toDateString(),
|
|
'sttebus' => '',
|
|
'masa' =>$current->toTimeString(),
|
|
'tagbaru' => 1
|
|
]);
|
|
|
|
$marhun = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->get();
|
|
|
|
foreach($marhun as $marhunloop){
|
|
$karatbaru = (strpos($marhunloop['karat'], '.') !== false) ? str_replace('-','.',$marhunloop['karat']) : $marhunloop['karat'];
|
|
$karatbaru = $marhunloop['karat'];
|
|
$harga_emas = HargaEmas::on('mysql7')->select('harga')->where('karat','=',$karatbaru)->first();
|
|
|
|
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']));
|
|
|
|
$marhunToCreate = [
|
|
'kodcaw'=> $kodcaw,
|
|
'norujukan'=> $new_sag_number,
|
|
't_gadai' => $current->toDateString(),
|
|
'bil' => $marhunloop['kuantiti'],
|
|
'marhun' => $marhunloop['marhun'],
|
|
'nota' => $marhunloop['nota'],
|
|
'tag_permata' => $marhunloop['tag_permata'] != null ? $marhunloop['tag_permata'] : 0,
|
|
'berat_batu_permata' => $marhunloop['berat_batu_permata'] != null ? $marhunloop['berat_batu_permata'] : '',
|
|
'karat' => $marhunloop['karat'],
|
|
'berat' => $marhunloop['berat'],
|
|
'harga' => $harga,
|
|
'n_marhun' => $nilai_marhun
|
|
];
|
|
|
|
if($marhunToCreate['berat_batu_permata'] == '') {
|
|
$marhunToCreate['berat_batu_permata'] = null;
|
|
};
|
|
|
|
Marhun::on($cawangan['mysql'])->create($marhunToCreate);
|
|
}
|
|
|
|
$total_nilai_marhun = Marhun::on($cawangan['mysql'])->where('norujukan',$new_sag_number)->sum('n_marhun');
|
|
$total_bil_marhun = Marhun::on($cawangan['mysql'])->where('norujukan',$new_sag_number)->sum('bil');
|
|
$total_berat_marhun = Marhun::on($cawangan['mysql'])->where('norujukan',$new_sag_number)->sum('berat');
|
|
|
|
$margin_pinjaman = ($array_trans['pinjamanbaru'] / $total_nilai_marhun);
|
|
|
|
$t_matang = Carbon::now();
|
|
$t_matang = $t_matang->addMonths(6)->subDays(1);
|
|
|
|
$t_kontrak = Carbon::now();
|
|
$t_kontrak = $t_kontrak->addMonths(12)->subDays(1);
|
|
|
|
$kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->where('group_id',$cawangan['group_id'])->first();
|
|
|
|
$onepercentservices = new Calculation();
|
|
$keuntungan = $onepercentservices->kiraanKeuntunganSebenar($array_trans['pinjamanbaru'],$total_nilai_marhun,$kadar_raw['kadarujrah'],$margin_pinjaman);
|
|
|
|
$upah1 = $onepercentservices->getRoundedMethod($keuntungan['keuntungan']);
|
|
$upah6 = $onepercentservices->getRoundedMethod($upah1 * 6);
|
|
$upah12 = $onepercentservices->getRoundedMethod($upah1 * 12);
|
|
$ujrah = $onepercentservices->getRoundedMethod($keuntungan['ujrah']);
|
|
$onepercent = $onepercentservices->getRoundedMethod($keuntungan['onepercent']);
|
|
$akrual_ujrah = $onepercentservices->getRoundedMethod($keuntungan['ujrah'] * 0.5);
|
|
$akrual_onepercent = $onepercentservices->getRoundedMethod($keuntungan['onepercent'] * 0.5);
|
|
|
|
$hargajualan = $array_trans['pinjamanbaru'] + $upah12;
|
|
|
|
Gadai::on($cawangan['mysql'])
|
|
->where('norujukan','=',$new_sag_number)
|
|
->update(array(
|
|
'nilaimarhun' => $total_nilai_marhun,
|
|
'berat'=> $total_berat_marhun,
|
|
'pinjaman' => $array_trans['pinjamanbaru'],
|
|
'kadarupah' => $kadar_raw['kadarujrah'],
|
|
'marhun' => $array_trans['marhun'],
|
|
'percentpinj' => $margin_pinjaman,
|
|
'teller' => $array_trans['teller'],
|
|
'bakipjm' => $array_trans['pinjamanbaru'],
|
|
'bakiupah' => $upah6,
|
|
'jbg' => 0.5,
|
|
't_update' => $current->toDateString(),
|
|
'cetak' => 0,
|
|
'upah12' => $upah12,
|
|
'hargajualan' => $hargajualan,
|
|
'bakihargajualan' => $hargajualan,
|
|
'tagserah' => 0,
|
|
't_matang' => $t_matang,
|
|
't_matang1' => $t_kontrak,
|
|
'tempoh' => 0.5,
|
|
'kuantiti' => $total_bil_marhun,
|
|
'tagkomuditi' => 0,
|
|
'upahdibayar' => 0.00,
|
|
'tempohbayar' => 0.00,
|
|
'lelong_tawarruq' => 1,
|
|
'kadarujrah' => $kadar_raw['kadarujrah'],
|
|
'ujrah' => $ujrah,
|
|
'onepercent' => $onepercent,
|
|
'margin_semasa' => $margin_pinjaman,
|
|
'tagbaru' => 1,
|
|
'tunggakanujrah' => $akrual_ujrah,
|
|
'tunggakanonepercent' => $akrual_onepercent,
|
|
'historygadaian' => $norujukan,
|
|
'tag_tebus' => $array_trans['jenistebus'],
|
|
));
|
|
|
|
Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->update(array(
|
|
'sttebus' => "T",
|
|
't_update' => $current->toDateString(),
|
|
));
|
|
|
|
}catch(\Exception $e){
|
|
throw new \Exception("Error in Transaction: " . $e->getMessage());
|
|
}
|
|
|
|
}
|
|
|
|
private function createTransactionBase($norujukan,$kodcaw,$array_trans_base){
|
|
$current = Carbon::now();
|
|
|
|
$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;
|
|
|
|
try{
|
|
$update_unit = $unit_current - $array_trans_base['pinjamanbaru'];
|
|
|
|
KomuditiPurchase::on('mysql7')->where('id','=',$komuditi_current['id'])->update([
|
|
'unit_komuditi' => $update_unit
|
|
]);
|
|
|
|
KomuditiTransaksi::on('mysql7')->create([
|
|
'unit_komuditi' => $update_unit,
|
|
'nosijil'=>$komuditi_current['no_sijil'],
|
|
'norujukan' => $norujukan,
|
|
'kodcaw' => $kodcaw,
|
|
'teller' => $array_trans_base['teller'],
|
|
'masa' => $current->toTimeString(),
|
|
'tarikh' => $current->toDateString()
|
|
]);
|
|
}catch(\Exception $e){
|
|
throw new \Exception("Error in TransactionBase: " . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
} |