feat(pembiayaan-online): let PC upload the signed gadai online confirmation form

This commit is contained in:
2026-10-22 11:31:18 +08:00
parent e1f8caa699
commit b9da2dd7df
3 changed files with 82 additions and 0 deletions
@@ -62,6 +62,7 @@ class PembiayaanOnlineController extends Controller
'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',
'borang_data', 'borang_filename', 'borang_type',
] as $key) {
if ($request->has($key)) {
$input[$key] = $request->input($key);
@@ -214,6 +215,14 @@ class PembiayaanOnlineController extends Controller
return $this->respond($this->service->getBuktiAkaun($kodcaw, $id));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/lines/{id}/borang
*/
public function getBorang($kodcaw, $id)
{
return $this->respond($this->service->getBorang($kodcaw, $id));
}
/**
* GET /api/pembiayaan-online/{kodcaw}/paid?blast_sent=0
*/
@@ -415,6 +415,19 @@ class PembiayaanOnlineService
$fields['bukti_akaun_file_id'] = $saved['payload']['id'];
}
if (!empty($input['borang_data'])) {
$saved = $this->storeBuktiFile([
'data' => $input['borang_data'],
'filename' => $input['borang_filename'] ?? null,
'type' => $input['borang_type'] ?? null,
]);
if (!$saved['ok']) {
$saved['payload']['message'] = 'Borang pengesahan diperlukan: fail, nama fail dan jenis fail.';
return $saved;
}
$fields['borang_file_id'] = $saved['payload']['id'];
}
if (empty($fields)) {
return [
'ok' => false,
@@ -1759,6 +1772,65 @@ class PembiayaanOnlineService
];
}
/**
* Get attached signed online-financing confirmation form (borang_file_id).
*
* @return array{ok:bool,status:int,payload:mixed}
*/
public function getBorang($kodcaw, $id)
{
$resolved = $this->resolveMysql($kodcaw);
if (!$resolved['ok']) {
return $resolved;
}
$line = PembiayaanOnline::on($resolved['mysql'])
->where('kodcaw', $kodcaw)
->where('id', $id)
->first();
if (!$line) {
return [
'ok' => false,
'status' => 404,
'payload' => ['message' => 'Pembiayaan online tidak dijumpai'],
];
}
if (empty($line->borang_file_id)) {
return [
'ok' => false,
'status' => 404,
'payload' => ['message' => 'Borang pengesahan belum dimuat naik'],
];
}
$file = ARFiles::on('mysql7')->where('id', $line->borang_file_id)->first();
if (!$file) {
return [
'ok' => false,
'status' => 404,
'payload' => ['message' => 'Fail borang pengesahan tidak dijumpai'],
];
}
return [
'ok' => true,
'status' => 200,
'payload' => [
'pembiayaan_online_id' => $line->id,
'norujukan' => $line->norujukan,
'file' => [
'id' => $file->id,
'filename' => $file->filename,
'type' => $file->type,
'tarikhmasa' => $file->tarikhmasa,
'data' => $file->data,
],
],
];
}
/**
* PC list of PAID lines awaiting blast / tally.
*
+1
View File
@@ -723,6 +723,7 @@ $router->group(['prefix'=>'api'], function () use ($router){
$router->post('pembiayaan-online/{kodcaw}/lines/{id}/unverify', ['uses' => 'PembiayaanOnlineController@unverifyLine']);
$router->get('pembiayaan-online/{kodcaw}/lines/{id}/bukti', ['uses' => 'PembiayaanOnlineController@getBukti']);
$router->get('pembiayaan-online/{kodcaw}/lines/{id}/bukti-akaun', ['uses' => 'PembiayaanOnlineController@getBuktiAkaun']);
$router->get('pembiayaan-online/{kodcaw}/lines/{id}/borang', ['uses' => 'PembiayaanOnlineController@getBorang']);
$router->get('pembiayaan-online/{kodcaw}/lines/{id}', ['uses' => 'PembiayaanOnlineController@showLine']);
$router->get('pembiayaan-online/{kodcaw}/batches', ['uses' => 'PembiayaanOnlineController@listBatches']);
$router->get('pembiayaan-online/{kodcaw}/batches/{batchId}', ['uses' => 'PembiayaanOnlineController@showBatch']);