Experiment/merge annur (#15)
Build Docker Image / build-backend (push) Successful in 23s

Co-authored-by: ISMAIL MASSERAN <topaz@Mac.dlinkrouter.local>
Reviewed-on: #15
This commit was merged in pull request #15.
This commit is contained in:
2026-09-20 12:49:53 +08:00
parent 79bc41d211
commit 9fa0172017
27 changed files with 930 additions and 298 deletions
@@ -26,6 +26,7 @@ class CawanganController extends Controller
$data = $cawangan->toArray();
$data['features'] = Feature::mapFor($code_cawangan);
$data['api_arrahnbid'] = Feature::arrahnbidUrl($code_cawangan);
return response()->json($data);
}
+7 -4
View File
@@ -537,7 +537,7 @@ class GadaiController extends Controller
public function getLaporanGadai($kodcaw,$tarikh){
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$gadai_data = Gadai::on($cawangan['mysql'])->select('cara_terima','t_gadai','norujukan','nokp','semakbarcode','masa','berat','nilaimarhun','pinjaman','upah12','percentpinj','teller','nokp','ujrah','onepercent')
$gadai_data = Gadai::on($cawangan['mysql'])->select('cara_terima','t_gadai','norujukan','nokp','semakbarcode','masa','berat','nilaimarhun','pinjaman','upah12','percentpinj','teller','nokp','ujrah','onepercent','kadarrebet','diskaun')
->where('t_gadai','=',$tarikh)
->orderBy('teller')
->orderBy('sirig')
@@ -564,7 +564,9 @@ class GadaiController extends Controller
"alamat1"=> $customer_info['alamat1'],
"teller"=> $gadaiData['teller'],
"onepercent"=> $gadaiData['onepercent'],
"ujrah"=> $gadaiData['ujrah']
"ujrah"=> $gadaiData['ujrah'],
"kadarrebet"=> $gadaiData['kadarrebet'],
"diskaun"=> $gadaiData['diskaun']
]);
}
}
@@ -627,8 +629,7 @@ class GadaiController extends Controller
"alamat1" => optional($customer)->alamat1,
"t_gadai" => $g->t_gadai,
"norujukan" => $g->norujukan,
"cara_terima" => $g->cara_terima,
"norujukan"=> $g->norujukan,
"cara_terima" => strtoupper((string) ($g->cara_terima ?: 'TUNAI')),
"nokp"=> $g->nokp,
"semakbarcode"=> $g->semakbarcode,
@@ -642,6 +643,8 @@ class GadaiController extends Controller
"teller"=> $g->teller,
"ujrah"=> $g->ujrah,
"onepercent"=> $g->onepercent,
"kadarrebet"=> $g->kadarrebet,
"diskaun"=> $g->diskaun,
"tagbaru"=> $g->tagbaru,
"kodkerja"=> optional($customer)->kodkerja,
"bangsa"=> optional($customer)->bangsa,
+33 -16
View File
@@ -11,6 +11,7 @@ use App\Negeri;
use App\Lelong;
use App\Transaction;
use App\Cawangan;
use App\Feature;
use App\Gadai;
use App\TuntutBaki;
use App\WTD;
@@ -26,6 +27,7 @@ use App\Tunai;
use App\Audit;
use App\GlDetail;
use App\Pembeli;
use Illuminate\Http\Client\ConnectionException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use App\Services\RingkasanHarianServices;
@@ -604,16 +606,7 @@ class LelongController extends Controller
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
if($cawangan['tagarrahnbid'] == 1){
if(env('APP_ENV') != 'production'){
$link = 'https://adminbid-kopkb.erahn.com.my/api/portalApi';
}else{
$link = 'https://adminbid-kopkb.erahn.com.my/api/portalApi';
}
$lelong = Http::withOptions(['verify' => true])->get($link,[
'norujukan' => $request->norujukan
])->json();
$lelong = ($lelong != null) ? $lelong['lelong'] : [];
$lelong = $this->fetchPortalLelong($request->kodcaw, $request->norujukan);
if( $lelong == null )
{
$lelong = Lelong::on($cawangan['mysql'])
@@ -656,10 +649,7 @@ class LelongController extends Controller
$cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $request->kodcaw)->first();
if ($cawangan['tagarrahnbid'] == 0){
$lelong = Http::withOptions(['verify' => true])->get(config('app_parameter.api_arrahnbid').'portalApi',[
'norujukan' => $request->norujukan
])->json();
$lelong = ($lelong != null) ? $lelong['lelong'] : [];
$lelong = $this->fetchPortalLelong($request->kodcaw, $request->norujukan);
if( $lelong == null )
{
$lelong = Lelong::on($cawangan['mysql'])
@@ -729,8 +719,8 @@ class LelongController extends Controller
if($cawangan['tagarrahnbid'] == 1)
{
$lelong = Http::withOptions(['verify' => true])->get(config('app_parameter.api_arrahnbid').'portalApi',['norujukan' => $request->norujukan])->json();
$lelong = ($lelong != null) ? $lelong['lelong'] : [];
$lelong = $this->fetchPortalLelong($request->kodcaw, $request->norujukan);
$lelong = ($lelong != null) ? $lelong : [];
}else{
$lelong = Lelong::on($cawangan['mysql'])->where([['norujukan',$request->norujukan]])->first();
}
@@ -2009,4 +1999,31 @@ class LelongController extends Controller
], 200);
}
/**
* Fetch lelong status from arrahnbid. Returns null when the portal is
* unreachable so callers can fall back to the local lelong table.
*/
private function fetchPortalLelong($kodcaw, $norujukan)
{
try {
$payload = Http::withOptions(['verify' => true])
->timeout(5)
->get(Feature::arrahnbidUrl($kodcaw).'portalApi', [
'norujukan' => $norujukan,
])
->json();
return ($payload != null) ? ($payload['lelong'] ?? null) : null;
} catch (ConnectionException $e) {
Log::warning('Arrahnbid portal unreachable; falling back to local lelong.', [
'kodcaw' => $kodcaw,
'norujukan' => $norujukan,
'url' => Feature::arrahnbidUrl($kodcaw).'portalApi',
'error' => $e->getMessage(),
]);
return null;
}
}
}
@@ -35,6 +35,14 @@ class PembiayaanOnlineController extends Controller
return $this->respond($this->service->show($kodcaw, $norujukan));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/lines/{id}
*/
public function showLine($kodcaw, $id)
{
return $this->respond($this->service->showLine($kodcaw, $id));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/queue
*/
@@ -53,6 +61,7 @@ class PembiayaanOnlineController extends Controller
foreach ([
'kodbank', 'noakaun', 'nama_bank', 'nama_akaun', 'nota',
'bukti_akaun_file_id', 'borang_file_id', 'update_customer_bank',
'bukti_akaun_data', 'bukti_akaun_filename', 'bukti_akaun_type',
] as $key) {
if ($request->has($key)) {
$input[$key] = $request->input($key);
@@ -62,6 +71,26 @@ class PembiayaanOnlineController extends Controller
return $this->respond($this->service->updateLine($kodcaw, $id, $input));
}
/**
* POST /api/pembiayaan-online/{kodcaw}/lines/{id}/verify
*/
public function verifyLine($kodcaw, $id, Request $request)
{
return $this->respond($this->service->verifyLine(
$kodcaw,
$id,
$request->input('pc_verified_by', '')
));
}
/**
* POST /api/pembiayaan-online/{kodcaw}/lines/{id}/unverify
*/
public function unverifyLine($kodcaw, $id)
{
return $this->respond($this->service->unverifyLine($kodcaw, $id));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/batches
*/
@@ -177,6 +206,14 @@ class PembiayaanOnlineController extends Controller
return $this->respond($this->service->getBukti($kodcaw, $id));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/lines/{id}/bukti-akaun
*/
public function getBuktiAkaun($kodcaw, $id)
{
return $this->respond($this->service->getBuktiAkaun($kodcaw, $id));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/paid?blast_sent=0
*/
+75 -4
View File
@@ -20,6 +20,7 @@ use App\Panjar;
use App\HargaEmas;
use App\Moratorium;
use App\Audit;
use App\Feature;
use App\LookupWakil;
use App\StokAudit1;
@@ -193,7 +194,7 @@ class TebusController extends Controller
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$tebus_data = Tebus::on($cawangan['mysql'])
->select('tebus.t_tebus', 'gad.t_gadai','gad.hargajualan','gad.bakihargajualan','gad.bakipjm as gadaibakipjm','tebus.nilaimarhun','tebus.tagterima', 'tebus.teller','tebus.jenistebus','tebus.pinjaman','tebus.bakiupah','tebus.bakipjm','gad.norujukan','gad.nokp','tebus.jbg','tebus.ujrah','tebus.onepercent','gad.tagbaru')
->select('tebus.t_tebus', 'gad.t_gadai','gad.hargajualan','gad.bakihargajualan','gad.bakipjm as gadaibakipjm','tebus.nilaimarhun','tebus.tagterima', 'tebus.teller','tebus.jenistebus','tebus.pinjaman','tebus.bakiupah','tebus.bakipjm','gad.norujukan','gad.nokp','tebus.jbg','tebus.ujrah','tebus.onepercent','gad.tagbaru','tebus.diskaun_rebate')
->join('gadai as gad','gad.norujukan','=','tebus.norujukan')
// ->join('online_arrahn.customer as cust', function($join)
// {
@@ -232,7 +233,8 @@ class TebusController extends Controller
"nokp"=>$tebusData['nokp'],
"jbg"=>$tebusData['jbg'],
"ujrah"=>$trans['ujrah_rebet'],
"onepercent"=>$trans['onepercent_rebet']
"onepercent"=>$trans['onepercent_rebet'],
"diskaun_rebate"=>$tebusData['diskaun_rebate'],
]);
}
@@ -274,7 +276,8 @@ class TebusController extends Controller
'tebus.jbg',
'tebus.ujrah',
'tebus.onepercent',
'gad.tagbaru'
'gad.tagbaru',
'tebus.diskaun_rebate'
)
->join('gadai as gad', 'gad.norujukan', '=', 'tebus.norujukan')
->where('tebus.t_tebus', '>=', $request->mula)
@@ -310,7 +313,8 @@ class TebusController extends Controller
"jbg"=>$tebusData['jbg'],
"ujrah"=>$trans['ujrah_rebet'],
"onepercent"=>$trans['onepercent_rebet'],
"tagbaru"=>$tebusData['tagbaru']
"tagbaru"=>$tebusData['tagbaru'],
"diskaun_rebate"=>$tebusData['diskaun_rebate'],
]);
}
@@ -1672,6 +1676,53 @@ class TebusController extends Controller
return response($rebet);
}
public function RebetPromoCalculation($kodcaw, Request $request)
{
$kodcaw = $request->kodcaw ?: $kodcaw;
if (!Feature::enabled($kodcaw, Feature::REBET_ANNUR)) {
return response(0);
}
$cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $kodcaw)->first();
$rebet = Tebus::on($cawangan['mysql'])
->join('gadai as db2', 'tebus.norujukan', '=', 'db2.norujukan')
->where('tebus.t_tebus', '<=', $request->tarikh)
->where('db2.hargajualan', '>', '0')
->whereNotNull('db2.hargajualan')
->sum('diskaun_rebate');
return response($rebet);
}
public function PelarasanRebate($kodcaw, Request $request)
{
$kodcaw = $request->kodcaw ?: $kodcaw;
if (!Feature::enabled($kodcaw, Feature::REBET_ANNUR)) {
return response(0);
}
$cawangan = Cawangan::on('mysql7')
->where('kodcaw', $kodcaw)
->first();
$tarikhLaporan = Carbon::parse($request->tarikh)->toDateString();
$tarikhTamatPelarasan = '2026-09-02';
$tarikhAkhir = $tarikhLaporan > $tarikhTamatPelarasan
? $tarikhTamatPelarasan
: $tarikhLaporan;
$rebet = Tebus::on($cawangan['mysql'])
->join('gadai as db2', 'tebus.norujukan', '=', 'db2.norujukan')
->whereDate('tebus.t_tebus', '>=', '2025-05-13')
->whereDate('tebus.t_tebus', '<=', $tarikhAkhir)
->where('db2.hargajualan', '>', 0)
->whereDate('db2.t_gadai', '>', '2023-05-21')
->sum('tebus.diskaun_rebate');
return response($rebet);
}
public function RebetCalculationLejer($kodcaw,Request $request)
{
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
@@ -1687,6 +1738,26 @@ class TebusController extends Controller
return response($rebet);
}
public function RebetPromoCalculationLejer($kodcaw, Request $request)
{
$kodcaw = $request->kodcaw ?: $kodcaw;
if (!Feature::enabled($kodcaw, Feature::REBET_ANNUR)) {
return response(0);
}
$cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $kodcaw)->first();
$rebet = Tebus::on($cawangan['mysql'])
->join('gadai as db2', 'tebus.norujukan', '=', 'db2.norujukan')
->where('tebus.t_tebus', '>=', $request->mula)
->where('tebus.t_tebus', '<=', $request->hingga)
->where('db2.hargajualan', '>', '0')
->whereNotNull('db2.hargajualan')
->sum('diskaun_rebate');
return response($rebet);
}
public function getUpahLamaToday($kodcaw,$norujukan)
{
$current = Carbon::now();