Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 93b99c6eb0 | |||
| 1385539d31 | |||
| 0451ad3dbe | |||
| d5cfe503c5 | |||
| 8dd8def358 | |||
| e3e7694b54 | |||
| 4648c7072b | |||
| ac57e04eac | |||
| a8888e66d1 | |||
| d0f08545d1 | |||
| 6c9f2f4f0f | |||
| 5d208f7a79 | |||
| 50cf966da7 |
+12
-1
@@ -68,4 +68,15 @@ KAUNTER_URL=http://host.docker.internal:8081
|
||||
INTERNAL_NOTIFICATION_SECRET=erahn-local-notification-secret
|
||||
|
||||
CACHE_DRIVER=file
|
||||
QUEUE_CONNECTION=sync
|
||||
QUEUE_CONNECTION=sync
|
||||
|
||||
BSAS_BASE_URL=https://bsasdevapi.bursamalaysia.com/api
|
||||
BSAS_TOKEN_URL=https://bsasdevapi.bursamalaysia.com/oauth/token
|
||||
BSAS_CLIENT_ID=
|
||||
BSAS_CLIENT_SECRET=
|
||||
BSAS_MEMBER_SHORT_NAME=KOOPPKB
|
||||
BSAS_PRODUCT_CODE=CPO-MSIA-09
|
||||
BSAS_TENOR=00088
|
||||
BSAS_MAX_WAIT_TIME=10
|
||||
BSAS_HTTP_TIMEOUT=30
|
||||
BSAS_ORDER_RESULT_RETRIES=2
|
||||
+12
-1
@@ -107,4 +107,15 @@ WHATSAPP_TEMPLATE=hello_world
|
||||
WHATSAPP_TEMPLATE_LANG=en_US
|
||||
WHATSAPP_VERIFY_TOKEN= # webhook verify token
|
||||
WHATSAPP_APP_SECRET= # X-Hub-Signature-256 checks; need to be enable first
|
||||
ADMIN_PHONE_NUMBER=60193450165
|
||||
ADMIN_PHONE_NUMBER=60193450165
|
||||
|
||||
BSAS_BASE_URL=https://bsasdevapi.bursamalaysia.com/api
|
||||
BSAS_TOKEN_URL=https://bsasdevapi.bursamalaysia.com/oauth/token
|
||||
BSAS_CLIENT_ID=
|
||||
BSAS_CLIENT_SECRET=
|
||||
BSAS_MEMBER_SHORT_NAME=KOOPPKB
|
||||
BSAS_PRODUCT_CODE=CPO-MSIA-09
|
||||
BSAS_TENOR=00088
|
||||
BSAS_MAX_WAIT_TIME=10
|
||||
BSAS_HTTP_TIMEOUT=30
|
||||
BSAS_ORDER_RESULT_RETRIES=2
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class BsasOrder extends Model
|
||||
{
|
||||
protected $connection = 'mysql7';
|
||||
protected $table = 'bsas_orders';
|
||||
|
||||
protected $fillable = [
|
||||
'uuid',
|
||||
'norujukan',
|
||||
'kodcaw',
|
||||
'serial_number',
|
||||
'product_code',
|
||||
'bid_value',
|
||||
'otc_murabaha_value',
|
||||
'otc_counter_party',
|
||||
'status',
|
||||
'status_code',
|
||||
'status_message',
|
||||
'e_cert_no',
|
||||
'bid_ecert_response',
|
||||
'otc_ecert_response',
|
||||
'stb_ecert_response',
|
||||
'request_payload',
|
||||
'order_response',
|
||||
'result_response',
|
||||
'created_by',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'bid_value' => 'decimal:2',
|
||||
'otc_murabaha_value' => 'decimal:2',
|
||||
'request_payload' => 'array',
|
||||
'order_response' => 'array',
|
||||
'result_response' => 'array',
|
||||
'bid_ecert_response' => 'array',
|
||||
'otc_ecert_response' => 'array',
|
||||
'stb_ecert_response' => 'array',
|
||||
];
|
||||
}
|
||||
@@ -158,7 +158,6 @@ class GadaiController extends Controller
|
||||
}
|
||||
|
||||
public function create($kodcaw,Request $request){
|
||||
|
||||
$master = new MasterServices($kodcaw);
|
||||
$response = $master->createGadai($request);
|
||||
|
||||
@@ -228,11 +227,14 @@ class GadaiController extends Controller
|
||||
}
|
||||
|
||||
|
||||
public function daftarGadaiMarhun($norujukan,Request $request){
|
||||
// dd("ggwp");
|
||||
$master = new MasterServices($request->kodcaw);
|
||||
$response = $master->createMarhunGadai($request->norujukan,$request);
|
||||
|
||||
public function daftarGadaiMarhun($kodcaw, $norujukan, Request $request)
|
||||
{
|
||||
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
|
||||
abort(409, 'Kontrak telah dihantar ke Shoraka dan tidak boleh diubah.');
|
||||
}
|
||||
$request->merge(['kodcaw' => $kodcaw, 'norujukan' => $norujukan]);
|
||||
$master = new MasterServices($kodcaw);
|
||||
$response = $master->createMarhunGadai($norujukan, $request);
|
||||
return response()->json($response, 200);
|
||||
}
|
||||
|
||||
@@ -369,6 +371,9 @@ class GadaiController extends Controller
|
||||
}
|
||||
|
||||
public function batalGadai($kodcaw, $norujukan,Request $request){
|
||||
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
|
||||
abort(409, 'Transaksi Shoraka telah dihantar. Semakan operasi diperlukan sebelum pembatalan.');
|
||||
}
|
||||
|
||||
$current = Carbon::now();
|
||||
$current = new Carbon();
|
||||
@@ -406,6 +411,11 @@ class GadaiController extends Controller
|
||||
}
|
||||
|
||||
public function pembelianKomuditi($kodcaw,$norujukan){
|
||||
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()
|
||||
|| !\App\KomuditiTransaksi::on('mysql7')->where('norujukan', $norujukan)->exists()) {
|
||||
app(\App\Services\ShorakaGadaiService::class)->assertCompleted($kodcaw, $norujukan);
|
||||
}
|
||||
|
||||
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
||||
|
||||
$gadai = Gadai::on($cawangan['mysql'])
|
||||
@@ -418,6 +428,10 @@ class GadaiController extends Controller
|
||||
}
|
||||
|
||||
public function cetakSAG($kodcaw,$norujukan,Request $request){
|
||||
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
|
||||
app(\App\Services\ShorakaGadaiService::class)->assertCompleted($kodcaw, $norujukan);
|
||||
}
|
||||
|
||||
$harini = Carbon::now();
|
||||
|
||||
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
||||
@@ -442,6 +456,10 @@ class GadaiController extends Controller
|
||||
}
|
||||
|
||||
public function serahMarhun($kodcaw,$norujukan){
|
||||
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
|
||||
app(\App\Services\ShorakaGadaiService::class)->assertCompleted($kodcaw, $norujukan);
|
||||
}
|
||||
|
||||
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
||||
$gadai = Gadai::on($cawangan['mysql'])
|
||||
->where('norujukan','=',$norujukan)
|
||||
|
||||
@@ -3,15 +3,18 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Audit;
|
||||
use App\BsasOrder;
|
||||
use App\Komuditi;
|
||||
use App\KomuditiPurchase;
|
||||
use App\KomuditiTransaksi;
|
||||
use App\KomuditiProduk;
|
||||
use App\Cawangan;
|
||||
use App\Services\Bsas\BsasOrderService;
|
||||
use DB;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class KomuditiController extends Controller
|
||||
{
|
||||
@@ -117,6 +120,9 @@ class KomuditiController extends Controller
|
||||
}
|
||||
|
||||
public function updateKomuditi(Request $request){
|
||||
if (\App\ShorakaTransaction::where('norujukan', $request->norujukan)->exists()) {
|
||||
abort(409, 'Transaksi Shoraka memerlukan semakan operasi; stok lama tidak boleh diubah.');
|
||||
}
|
||||
$current = Carbon::now();
|
||||
$current = new Carbon();
|
||||
|
||||
@@ -138,37 +144,20 @@ class KomuditiController extends Controller
|
||||
return response()->json($komuditi_transaksi);
|
||||
}
|
||||
|
||||
public function transaksiKomuditi(Request $request){
|
||||
$current = Carbon::now();
|
||||
$current = new Carbon();
|
||||
|
||||
$komuditi_current = KomuditiPurchase::on('mysql7')->where('date_purchase','=',$current->toDateString())->orderBy('created_at','desc')->first();
|
||||
|
||||
$unit_current = $komuditi_current['unit_komuditi'];
|
||||
$update_unit = $unit_current - $request->unit_komuditi;
|
||||
|
||||
$unit_current = round((float) $komuditi_current['unit_komuditi'], 2);
|
||||
$unit_komuditi = round((float) $request->unit_komuditi, 2);
|
||||
$update_unit = round($unit_current - $unit_komuditi, 2);
|
||||
|
||||
$update_komuditi = KomuditiPurchase::on('mysql7')->where('id','=',$komuditi_current['id'])->update([
|
||||
'unit_komuditi' => $update_unit
|
||||
]);
|
||||
|
||||
$komuditi_transaksi = KomuditiTransaksi::on('mysql7')->create([
|
||||
'unit_komuditi' => $unit_komuditi,
|
||||
'nosijil'=>$komuditi_current['no_sijil'],
|
||||
'norujukan' => $request->norujukan,
|
||||
'kodcaw' => $request->kodcaw ,
|
||||
'teller' => $request->teller ,
|
||||
'masa' => $current->toTimeString(),
|
||||
'tarikh' => $current->toDateString()
|
||||
]);
|
||||
|
||||
return response()->json($komuditi_transaksi);
|
||||
public function transaksiKomuditi(Request $request)
|
||||
{
|
||||
$this->validate($request, ['kodcaw' => 'required|string', 'norujukan' => 'required|string']);
|
||||
return app(ShorakaGadaiController::class)->submitGadai(
|
||||
$request->kodcaw, $request->norujukan,
|
||||
app(\App\Services\ShorakaGadaiService::class),
|
||||
app(\App\Services\ShorakaService::class)
|
||||
);
|
||||
}
|
||||
|
||||
public function batalKomuditi(Request $request){
|
||||
if (\App\ShorakaTransaction::where('norujukan', $request->norujukan)->exists()) {
|
||||
abort(409, 'Transaksi Shoraka memerlukan semakan operasi; stok lama tidak boleh diubah.');
|
||||
}
|
||||
|
||||
$komuditi_current = KomuditiPurchase::on('mysql7')->orderBy('created_at','desc')->first();
|
||||
|
||||
@@ -338,4 +327,195 @@ class KomuditiController extends Controller
|
||||
return response()->json($rekodkomoditi);
|
||||
}
|
||||
|
||||
/**
|
||||
* List BSAS commodity orders for operasi rekod view.
|
||||
*/
|
||||
public function listBsasOrders(Request $request)
|
||||
{
|
||||
$query = BsasOrder::on('mysql7')
|
||||
->select([
|
||||
'id',
|
||||
'uuid',
|
||||
'norujukan',
|
||||
'kodcaw',
|
||||
'serial_number',
|
||||
'product_code',
|
||||
'bid_value',
|
||||
'otc_murabaha_value',
|
||||
'otc_counter_party',
|
||||
'status',
|
||||
'status_code',
|
||||
'status_message',
|
||||
'e_cert_no',
|
||||
'bid_ecert_response',
|
||||
'otc_ecert_response',
|
||||
'stb_ecert_response',
|
||||
'created_by',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
])
|
||||
->orderBy('created_at', 'desc')
|
||||
->orderBy('id', 'desc');
|
||||
|
||||
if ($request->filled('status')) {
|
||||
$query->where('status', $request->input('status'));
|
||||
}
|
||||
|
||||
if ($request->filled('kodcaw')) {
|
||||
$query->where('kodcaw', $request->input('kodcaw'));
|
||||
}
|
||||
|
||||
if ($request->filled('limit_view')) {
|
||||
$query->limit((int) $request->input('limit_view'));
|
||||
}
|
||||
|
||||
$rows = $query->get()->map(function (BsasOrder $order) {
|
||||
$payload = $order->toArray();
|
||||
$payload['has_bid_ecert'] = !empty($order->bid_ecert_response);
|
||||
$payload['has_otc_ecert'] = !empty($order->otc_ecert_response);
|
||||
$payload['has_stb_ecert'] = !empty($order->stb_ecert_response);
|
||||
unset($payload['bid_ecert_response'], $payload['otc_ecert_response'], $payload['stb_ecert_response']);
|
||||
|
||||
return $payload;
|
||||
});
|
||||
|
||||
return response()->json($rows);
|
||||
}
|
||||
|
||||
/**
|
||||
* SAG-ready komoditi/product payload from confirmed BSAS order for a norujukan.
|
||||
* Replaces daily KomuditiPurchase lookup for per-Terima BSAS purchases.
|
||||
*/
|
||||
public function getBsasOrderByNorujukan($norujukan)
|
||||
{
|
||||
$order = BsasOrder::on('mysql7')
|
||||
->where('norujukan', $norujukan)
|
||||
->where('status', 'confirmed')
|
||||
->orderBy('id', 'desc')
|
||||
->first();
|
||||
|
||||
if (!$order) {
|
||||
return response()->json(['message' => 'BSAS order tidak dijumpai untuk norujukan ini.'], 404);
|
||||
}
|
||||
|
||||
$otc = is_array($order->otc_ecert_response) ? $order->otc_ecert_response : [];
|
||||
$productCode = (string) ($order->product_code ?: config('bsas.product_code'));
|
||||
$description = trim((string) ($otc['PNAME'] ?? ''));
|
||||
if ($description === '') {
|
||||
$produk = KomuditiProduk::on('mysql7')->where('kodproduk', $productCode)->first();
|
||||
$description = $produk ? (string) $produk->description : $productCode;
|
||||
}
|
||||
|
||||
$price = (float) ($otc['PRICE_MYR_EQUIVALENT'] ?? $otc['PRICE'] ?? 0);
|
||||
$volume = (float) ($otc['PVOLUME'] ?? 0);
|
||||
$pinjaman = (float) $order->bid_value;
|
||||
if ($volume <= 0 && $price > 0 && $pinjaman > 0) {
|
||||
$volume = round($pinjaman / $price, 4);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'source' => 'bsas',
|
||||
'uuid' => $order->uuid,
|
||||
'komoditi' => [
|
||||
'no_sijil' => $order->e_cert_no ?: $order->uuid,
|
||||
'kodproduct' => $productCode,
|
||||
'nilai' => $price > 0 ? $price : null,
|
||||
],
|
||||
'product' => [
|
||||
'product_code' => $productCode,
|
||||
'kodproduk' => $productCode,
|
||||
'description' => $description,
|
||||
'unit' => 'TAN',
|
||||
],
|
||||
'kuantiti' => $volume,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return stored BSAS eCert payload only (no live BSAS refresh).
|
||||
*/
|
||||
public function getBsasOrderEcert($uuid)
|
||||
{
|
||||
$order = BsasOrder::on('mysql7')->where('uuid', $uuid)->first();
|
||||
|
||||
if (!$order) {
|
||||
return response()->json(['message' => 'BSAS order tidak dijumpai.'], 404);
|
||||
}
|
||||
|
||||
if (empty($order->bid_ecert_response) && empty($order->otc_ecert_response) && empty($order->stb_ecert_response)) {
|
||||
return response()->json(['message' => 'eCert belum tersedia untuk order ini.'], 404);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'uuid' => $order->uuid,
|
||||
'norujukan' => $order->norujukan,
|
||||
'e_cert_no' => $order->e_cert_no,
|
||||
'serial_number' => $order->serial_number,
|
||||
'product_code' => $order->product_code,
|
||||
'bid_value' => $order->bid_value,
|
||||
'otc_murabaha_value' => $order->otc_murabaha_value,
|
||||
'otc_counter_party' => $order->otc_counter_party,
|
||||
'bid_ecert' => $order->bid_ecert_response,
|
||||
'otc_ecert' => $order->otc_ecert_response,
|
||||
'stb_ecert' => $order->stb_ecert_response,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Place BSAS commodity order for a gadai Terima, long-poll result, fetch eCert.
|
||||
*/
|
||||
public function placeBsasOrder(Request $request)
|
||||
{
|
||||
try {
|
||||
$service = new BsasOrderService();
|
||||
$order = $service->placeAndConfirm([
|
||||
'norujukan' => $request->input('norujukan'),
|
||||
'kodcaw' => $request->input('kodcaw'),
|
||||
'pinjaman' => $request->input('pinjaman'),
|
||||
'hargajualan' => $request->input('hargajualan'),
|
||||
'nama_pelanggan' => $request->input('nama_pelanggan'),
|
||||
'teller' => $request->input('teller'),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'BSAS order confirmed',
|
||||
'order' => $order,
|
||||
], 200);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('BSAS place order failed', [
|
||||
'norujukan' => $request->input('norujukan'),
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => $e->getMessage() ?: 'Gagal pembelian komoditi BSAS.',
|
||||
], 422);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-query BSAS orderResult / retry eCert by stored uuid.
|
||||
*/
|
||||
public function getBsasOrder($uuid)
|
||||
{
|
||||
try {
|
||||
$service = new BsasOrderService();
|
||||
$order = $service->refreshByUuid($uuid);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'OK',
|
||||
'order' => $order,
|
||||
], 200);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('BSAS refresh order failed', [
|
||||
'uuid' => $uuid,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => $e->getMessage() ?: 'Gagal semak status BSAS.',
|
||||
], 422);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -59,6 +59,11 @@ class MarhunController extends Controller
|
||||
|
||||
public function create($kodcaw,Request $request)
|
||||
{
|
||||
$order = \App\ShorakaTransaction::where('norujukan', $request->norujukan)->first();
|
||||
if ($order) {
|
||||
abort(409, 'Kontrak Shoraka telah dihantar dan tidak boleh diubah.');
|
||||
}
|
||||
|
||||
$current = Carbon::now();
|
||||
$current = new Carbon();
|
||||
|
||||
@@ -127,6 +132,10 @@ class MarhunController extends Controller
|
||||
|
||||
public function deletemarhun($kodcaw,$norujukan,Request $request)
|
||||
{
|
||||
$order = \App\ShorakaTransaction::where('norujukan', $norujukan)->first();
|
||||
if ($order) {
|
||||
abort(409, 'Kontrak Shoraka telah dihantar dan tidak boleh diubah.');
|
||||
}
|
||||
|
||||
$current = Carbon::now();
|
||||
$current = new Carbon();
|
||||
@@ -152,6 +161,11 @@ class MarhunController extends Controller
|
||||
|
||||
public function editmarhun($kodcaw,$norujukan,Request $request)
|
||||
{
|
||||
$order = \App\ShorakaTransaction::where('norujukan', $norujukan)->first();
|
||||
if ($order) {
|
||||
abort(409, 'Kontrak Shoraka telah dihantar dan tidak boleh diubah.');
|
||||
}
|
||||
|
||||
|
||||
$current = Carbon::now();
|
||||
$current = new Carbon();
|
||||
|
||||
@@ -0,0 +1,291 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\ShorakaTransaction;
|
||||
use App\Services\ShorakaService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Throwable;
|
||||
|
||||
class ShorakaController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'kodcaw' => 'nullable|string|max:30',
|
||||
'norujukan' => 'nullable|string|max:100',
|
||||
'status' => 'nullable|string|max:30',
|
||||
'date_from' => 'nullable|date_format:Y-m-d',
|
||||
'date_to' => 'nullable|date_format:Y-m-d',
|
||||
'per_page' => 'nullable|integer|min:1|max:100',
|
||||
'page' => 'nullable|integer|min:1',
|
||||
'branch_scope' => 'nullable|string|max:30',
|
||||
]);
|
||||
|
||||
$query = ShorakaTransaction::query();
|
||||
foreach (['kodcaw', 'norujukan', 'status'] as $field) {
|
||||
if ($request->filled($field)) {
|
||||
$query->where($field, $request->input($field));
|
||||
}
|
||||
}
|
||||
if ($request->filled('date_from')) {
|
||||
$query->where('created_at', '>=', $request->input('date_from') . ' 00:00:00');
|
||||
}
|
||||
if ($request->filled('date_to')) {
|
||||
$query->where('created_at', '<', Carbon::parse($request->input('date_to'))->addDay()->format('Y-m-d') . ' 00:00:00');
|
||||
}
|
||||
$records = $query->orderByDesc('created_at')->orderByDesc('id')
|
||||
->paginate(min(100, max(1, (int) $request->input('per_page', 25))));
|
||||
$payload = [
|
||||
'data' => $records->getCollection()->map(function (ShorakaTransaction $record) {
|
||||
return [
|
||||
'id' => $record->id,
|
||||
'kodcaw' => $record->kodcaw,
|
||||
'norujukan' => $record->norujukan,
|
||||
'teller' => $record->teller,
|
||||
'status' => $record->status,
|
||||
'order_id' => $record->order_id,
|
||||
'created_at' => optional($record->created_at)->toDateTimeString(),
|
||||
'updated_at' => optional($record->updated_at)->toDateTimeString(),
|
||||
];
|
||||
})->values(),
|
||||
'total' => $records->total(),
|
||||
'current_page' => $records->currentPage(),
|
||||
'per_page' => $records->perPage(),
|
||||
'last_page' => $records->lastPage(),
|
||||
];
|
||||
if ($request->input('with_branches')) {
|
||||
$branches = ShorakaTransaction::query()->whereNotNull('kodcaw');
|
||||
if ($request->filled('branch_scope')) {
|
||||
$branches->where('kodcaw', $request->input('branch_scope'));
|
||||
}
|
||||
$payload['branches'] = $branches->distinct()->orderBy('kodcaw')->pluck('kodcaw')->values();
|
||||
}
|
||||
return response()->json($payload);
|
||||
}
|
||||
|
||||
public function submit(Request $request, ShorakaService $shoraka)
|
||||
{
|
||||
$validated = $this->validate($request, [
|
||||
'norujukan' => 'required|string|max:255',
|
||||
'ownership' => 'required|string|max:255',
|
||||
'order_amount' => 'required|numeric|min:0.01|max:9999999999999.99',
|
||||
'murabaha_amount' => 'required|numeric|min:0.01|max:9999999999999.99',
|
||||
'tenor_other' => 'required|integer|min:1',
|
||||
'teller' => 'nullable|string|max:255',
|
||||
]);
|
||||
if (!$shoraka->configured()) {
|
||||
return $this->unconfigured();
|
||||
}
|
||||
|
||||
$existing = ShorakaTransaction::where('norujukan', $validated['norujukan'])->first();
|
||||
if ($existing) {
|
||||
return $this->duplicate($existing);
|
||||
}
|
||||
|
||||
$payload = [
|
||||
'product_type' => 'FINANCING',
|
||||
'commodity_type' => '000-COPPER',
|
||||
'ownership' => $validated['ownership'],
|
||||
'ownership_doc_no' => $validated['norujukan'],
|
||||
'value_date' => Carbon::now()->format('d/m/Y'),
|
||||
'order_currency' => 'MYR',
|
||||
'order_amount' => number_format((float) $validated['order_amount'], 2, '.', ''),
|
||||
'murabaha_amount' => number_format((float) $validated['murabaha_amount'], 2, '.', ''),
|
||||
// Appendix codes in v1.5: OTHERS and MONTH.
|
||||
'tenor' => 'OTHERS',
|
||||
'tenor_other' => $validated['tenor_other'],
|
||||
'tenor_other_unit' => 'MONTH',
|
||||
'order_type' => 'Buy & Sell',
|
||||
];
|
||||
|
||||
try {
|
||||
// The unique norujukan index is the atomic claim for concurrent submissions.
|
||||
$attributes = [
|
||||
'norujukan' => $validated['norujukan'],
|
||||
'kodcaw' => $request->attributes->get('shoraka_kodcaw'),
|
||||
'teller' => $validated['teller'] ?? null,
|
||||
'status' => 'PENDING',
|
||||
'product_type' => $payload['product_type'],
|
||||
'commodity_type' => $payload['commodity_type'],
|
||||
'ownership_name' => $payload['ownership'],
|
||||
'ownership_doc_no' => $payload['ownership_doc_no'],
|
||||
'order_amount' => $payload['order_amount'],
|
||||
'murabaha_amount' => $payload['murabaha_amount'],
|
||||
'request_payload' => $payload,
|
||||
'attempt_count' => 1,
|
||||
];
|
||||
$transaction = ShorakaTransaction::create($attributes);
|
||||
} catch (QueryException $exception) {
|
||||
$existing = ShorakaTransaction::where('norujukan', $validated['norujukan'])->first();
|
||||
if ($existing) {
|
||||
return $this->duplicate($existing);
|
||||
}
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
try {
|
||||
$response = $shoraka->submitOrder($payload);
|
||||
$this->saveOrder($transaction, $response);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Order berjaya dihantar ke Shoraka.',
|
||||
'data' => $this->orderData($transaction),
|
||||
]);
|
||||
} catch (Throwable $exception) {
|
||||
// A timeout or invalid response does not prove the remote trade failed.
|
||||
// Block resubmission until this reference has been reconciled with Shoraka.
|
||||
$transaction->update([
|
||||
'status' => $transaction->order_id ? $transaction->status : 'UNKNOWN',
|
||||
'error_message' => 'Submission outcome requires reconciliation with Shoraka.',
|
||||
]);
|
||||
|
||||
return $this->upstreamError('submit', $transaction, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function refresh(string $norujukan, ShorakaService $shoraka)
|
||||
{
|
||||
if (!$shoraka->configured()) {
|
||||
return $this->unconfigured();
|
||||
}
|
||||
$transaction = ShorakaTransaction::where('norujukan', $norujukan)->firstOrFail();
|
||||
if (!$transaction->order_id) {
|
||||
return $this->missingOrderId();
|
||||
}
|
||||
|
||||
try {
|
||||
$response = $shoraka->orderStatus($transaction->order_id);
|
||||
$this->saveOrder($transaction, $response);
|
||||
|
||||
return response()->json(['success' => true, 'data' => $this->orderData($transaction)]);
|
||||
} catch (Throwable $exception) {
|
||||
return $this->upstreamError('status', $transaction, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function certificate(string $norujukan, ShorakaService $shoraka)
|
||||
{
|
||||
if (!$shoraka->configured()) {
|
||||
return $this->unconfigured();
|
||||
}
|
||||
$transaction = ShorakaTransaction::where('norujukan', $norujukan)->firstOrFail();
|
||||
if (!$transaction->order_id) {
|
||||
return $this->missingOrderId();
|
||||
}
|
||||
|
||||
try {
|
||||
$pdf = $shoraka->certificate($transaction->order_id);
|
||||
|
||||
return response($pdf, 200, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'attachment; filename="shoraka-' . $transaction->id . '.pdf"',
|
||||
'Cache-Control' => 'private, no-store',
|
||||
]);
|
||||
} catch (Throwable $exception) {
|
||||
return $this->upstreamError('certificate', $transaction, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function callback(Request $request, ShorakaService $shoraka)
|
||||
{
|
||||
if (!$shoraka->configured()) {
|
||||
return $this->unconfigured();
|
||||
}
|
||||
$payload = $request->json()->all();
|
||||
if (!$shoraka->validCallback($payload)) {
|
||||
return response()->json(['success' => false, 'message' => 'Invalid callback signature.'], 401);
|
||||
}
|
||||
|
||||
// ownershipDocNo and certificateUrl are NOT signed. Never use them to link
|
||||
// a callback to a local record or download a file.
|
||||
$transaction = ShorakaTransaction::where('order_id', $payload['orderId'])->first();
|
||||
if (!$transaction) {
|
||||
return response()->json(['success' => false, 'message' => 'Order not found.'], 404);
|
||||
}
|
||||
|
||||
try {
|
||||
// There is no signed callback timestamp. Query the current order so a
|
||||
// delayed/replayed callback cannot directly restore an old status.
|
||||
$response = $shoraka->orderStatus($transaction->order_id);
|
||||
unset($payload['signature']);
|
||||
$this->saveOrder($transaction, $response, ['callback_payload' => $payload]);
|
||||
|
||||
// Exact acknowledgement required by section 6.
|
||||
return response('OK', 200, ['Content-Type' => 'text/plain']);
|
||||
} catch (Throwable $exception) {
|
||||
return $this->upstreamError('callback', $transaction, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
protected function saveOrder(ShorakaTransaction $transaction, array $response, array $extra = []): void
|
||||
{
|
||||
$transaction->update(array_merge([
|
||||
'order_id' => (string) $response['orderId'],
|
||||
'status' => $response['status'],
|
||||
'certificate_url' => $response['certificateUrl'] ?? null,
|
||||
'response_payload' => $response,
|
||||
'submitted_at' => $transaction->submitted_at ?: Carbon::now(),
|
||||
'completed_at' => $response['status'] === 'Completed'
|
||||
? ($transaction->completed_at ?: Carbon::now()) : $transaction->completed_at,
|
||||
'error_message' => null,
|
||||
], $extra));
|
||||
app(\App\Services\ShorakaGadaiService::class)->sync($transaction);
|
||||
}
|
||||
|
||||
protected function orderData(ShorakaTransaction $transaction): array
|
||||
{
|
||||
return [
|
||||
'norujukan' => $transaction->norujukan,
|
||||
'kodcaw' => $transaction->kodcaw,
|
||||
'teller' => $transaction->teller,
|
||||
'order_id' => $transaction->order_id,
|
||||
'status' => $transaction->status,
|
||||
'certificate_url' => $transaction->certificate_url,
|
||||
];
|
||||
}
|
||||
|
||||
protected function duplicate(ShorakaTransaction $transaction)
|
||||
{
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Transaksi telah direkodkan. Semak status dengan Shoraka sebelum penghantaran semula.',
|
||||
'data' => $this->orderData($transaction),
|
||||
], 409);
|
||||
}
|
||||
|
||||
protected function missingOrderId()
|
||||
{
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Order ID belum tersedia. Semakan dengan Shoraka diperlukan.',
|
||||
], 409);
|
||||
}
|
||||
|
||||
protected function unconfigured()
|
||||
{
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'API ID dan Secret Key Shoraka belum dikonfigurasi.',
|
||||
], 503);
|
||||
}
|
||||
|
||||
protected function upstreamError(string $operation, ShorakaTransaction $transaction, Throwable $exception)
|
||||
{
|
||||
// Connection exceptions may include request details; log only the class.
|
||||
Log::error('Shoraka request failed', [
|
||||
'operation' => $operation,
|
||||
'transaction_id' => $transaction->id,
|
||||
'exception_type' => get_class($exception),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Permintaan Shoraka gagal. Semak status transaksi sebelum mencuba semula.',
|
||||
], 502);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\KomuditiTransaksi;
|
||||
use App\Services\ShorakaGadaiService;
|
||||
use App\Services\ShorakaService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ShorakaGadaiController extends ShorakaController
|
||||
{
|
||||
public function readiness(ShorakaService $shoraka)
|
||||
{
|
||||
try {
|
||||
\App\ShorakaTransaction::query()->limit(1)->exists();
|
||||
$storeReady = true;
|
||||
} catch (\Throwable $exception) {
|
||||
$storeReady = false;
|
||||
}
|
||||
return response()->json(['provider' => 'shoraka', 'ready' => $storeReady && $shoraka->configured()]);
|
||||
}
|
||||
|
||||
public function showGadai(string $kodcaw, string $norujukan, ShorakaGadaiService $gadaiService)
|
||||
{
|
||||
$gadai = $gadaiService->gadai($kodcaw, $norujukan);
|
||||
$order = $gadaiService->transaction($kodcaw, $norujukan);
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'data' => [
|
||||
'norujukan' => $norujukan, 'kodcaw' => $kodcaw,
|
||||
'order_amount' => $gadai->pinjaman, 'murabaha_amount' => $gadai->hargajualan,
|
||||
'order' => $order ? $this->orderData($order) : null,
|
||||
'details' => $order ? $order->response_payload : null,
|
||||
'simulation' => $order && strpos((string) $order->order_id, 'SIM-') === 0,
|
||||
'can_complete' => $gadai->exists && $order && $order->status === 'Completed'
|
||||
&& number_format((float) $gadai->pinjaman, 2, '.', '') === $order->order_amount
|
||||
&& number_format((float) $gadai->hargajualan, 2, '.', '') === $order->murabaha_amount,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function submitGadai(string $kodcaw, string $norujukan, Request $request, ShorakaGadaiService $gadaiService, ShorakaService $shoraka)
|
||||
{
|
||||
$gadai = $gadaiService->gadai($kodcaw, $norujukan);
|
||||
$existing = $gadaiService->transaction($kodcaw, $norujukan);
|
||||
if ($existing) {
|
||||
return $this->duplicate($existing);
|
||||
}
|
||||
// Historical commodity purchases must never be traded again.
|
||||
if (KomuditiTransaksi::on('mysql7')->where('norujukan', $norujukan)->exists()
|
||||
|| $gadai->cetak || $gadai->sttebus) {
|
||||
abort(409, 'Gadaian lama atau telah selesai tidak boleh dihantar sebagai order baharu.');
|
||||
}
|
||||
$payload = $gadaiService->payload($gadai);
|
||||
$teller = $request->input('teller');
|
||||
if (is_string($teller) && $teller !== '') {
|
||||
$payload['teller'] = $teller;
|
||||
}
|
||||
$submission = new Request($payload);
|
||||
$submission->attributes->set('shoraka_kodcaw', $kodcaw);
|
||||
return $this->submit($submission, $shoraka);
|
||||
}
|
||||
|
||||
public function refreshGadai(string $kodcaw, string $norujukan, ShorakaGadaiService $gadaiService, ShorakaService $shoraka)
|
||||
{
|
||||
$gadaiService->gadai($kodcaw, $norujukan);
|
||||
$gadaiService->transaction($kodcaw, $norujukan);
|
||||
return $this->refresh($norujukan, $shoraka);
|
||||
}
|
||||
|
||||
public function certificateGadai(string $kodcaw, string $norujukan, ShorakaGadaiService $gadaiService, ShorakaService $shoraka)
|
||||
{
|
||||
$gadaiService->assertCompleted($kodcaw, $norujukan);
|
||||
return $this->certificate($norujukan, $shoraka);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Bsas;
|
||||
|
||||
use Illuminate\Http\Client\PendingRequest;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use RuntimeException;
|
||||
|
||||
class BsasClient
|
||||
{
|
||||
const TOKEN_CACHE_KEY = 'bsas.oauth.token';
|
||||
const TOKEN_CACHE_SECONDS = 82800; // 23 hours
|
||||
|
||||
public function getAccessToken(): string
|
||||
{
|
||||
$cached = Cache::get(self::TOKEN_CACHE_KEY);
|
||||
if (is_string($cached) && $cached !== '') {
|
||||
return $cached;
|
||||
}
|
||||
|
||||
// Drop bad cache entries (e.g. whole JSON array accidentally stored).
|
||||
if ($cached !== null) {
|
||||
Cache::forget(self::TOKEN_CACHE_KEY);
|
||||
}
|
||||
|
||||
$tokenUrl = config('bsas.token_url');
|
||||
$clientId = config('bsas.client_id');
|
||||
$clientSecret = config('bsas.client_secret');
|
||||
|
||||
if (!$tokenUrl || !$clientId || !$clientSecret) {
|
||||
throw new RuntimeException('BSAS OAuth is not configured (token_url / client_id / client_secret).');
|
||||
}
|
||||
|
||||
$response = $this->http()
|
||||
->asForm()
|
||||
->post($tokenUrl, [
|
||||
'grant_type' => 'client_credentials',
|
||||
'client_id' => $clientId,
|
||||
'client_secret' => $clientSecret,
|
||||
]);
|
||||
|
||||
$payload = $response->json();
|
||||
if (!is_array($payload)) {
|
||||
$payload = [];
|
||||
}
|
||||
|
||||
if (!$response->successful()) {
|
||||
Log::error('BSAS OAuth token request failed', [
|
||||
'status' => $response->status(),
|
||||
'body' => $payload ?: $response->body(),
|
||||
]);
|
||||
throw new RuntimeException('Gagal mendapatkan BSAS access token.');
|
||||
}
|
||||
|
||||
$token = $payload['access_token'] ?? null;
|
||||
if (!is_string($token) || $token === '') {
|
||||
Log::error('BSAS OAuth response missing string access_token', [
|
||||
'body' => $payload,
|
||||
]);
|
||||
throw new RuntimeException('BSAS OAuth response missing access_token.');
|
||||
}
|
||||
|
||||
$expiresIn = (int) ($payload['expires_in'] ?? self::TOKEN_CACHE_SECONDS);
|
||||
$ttl = max(60, min(self::TOKEN_CACHE_SECONDS, $expiresIn - 300));
|
||||
Cache::put(self::TOKEN_CACHE_KEY, $token, $ttl);
|
||||
|
||||
return $token;
|
||||
}
|
||||
|
||||
public function placeOrder(array $payload): array
|
||||
{
|
||||
return $this->requestJson('post', '/process/svc/bsas/order', $payload);
|
||||
}
|
||||
|
||||
public function orderResult(string $uuid, array $body = []): array
|
||||
{
|
||||
$maxWait = (string) ($body['maxWaitTime'] ?? config('bsas.max_wait_time', 10));
|
||||
|
||||
$payload = [
|
||||
'header' => [
|
||||
'memberShortName' => config('bsas.member_short_name'),
|
||||
'uuid' => $uuid,
|
||||
],
|
||||
'body' => [
|
||||
'serialNumbers' => (string) ($body['serialNumbers'] ?? '1'),
|
||||
'forceYN' => (string) ($body['forceYN'] ?? 'Y'),
|
||||
'maxWaitTime' => $maxWait,
|
||||
'waitAllDoneYN' => (string) ($body['waitAllDoneYN'] ?? 'Y'),
|
||||
],
|
||||
];
|
||||
|
||||
// Long poll: client timeout must exceed BSAS maxWaitTime.
|
||||
$timeout = max(
|
||||
(int) config('bsas.http_timeout', 30),
|
||||
(int) $maxWait + 20
|
||||
);
|
||||
|
||||
return $this->requestJson('get', '/process/svc/bsas/orderResult', $payload, $timeout);
|
||||
}
|
||||
|
||||
public function getBidEcert(string $ecertNo): array
|
||||
{
|
||||
return $this->requestEcert('/process/svc/bsas/bidXML', $ecertNo);
|
||||
}
|
||||
|
||||
public function getOtcEcert(string $ecertNo): array
|
||||
{
|
||||
return $this->requestEcert('/process/svc/bsas/otcXML', $ecertNo);
|
||||
}
|
||||
|
||||
public function getStbEcert(string $ecertNo): array
|
||||
{
|
||||
return $this->requestEcert('/process/svc/bsas/stbXML', $ecertNo);
|
||||
}
|
||||
|
||||
protected function requestEcert(string $path, string $ecertNo): array
|
||||
{
|
||||
$payload = [
|
||||
'input' => [
|
||||
'ecertno' => $ecertNo,
|
||||
'membershortname' => config('bsas.member_short_name'),
|
||||
],
|
||||
];
|
||||
|
||||
return $this->requestJson('get', $path, $payload);
|
||||
}
|
||||
|
||||
protected function requestJson(string $method, string $path, array $payload, ?int $timeout = null): array
|
||||
{
|
||||
$url = rtrim(config('bsas.base_url'), '/') . '/' . ltrim($path, '/');
|
||||
$timeout = $timeout ?? (int) config('bsas.http_timeout', 30);
|
||||
$token = $this->getAccessToken();
|
||||
|
||||
$pending = $this->http($timeout)
|
||||
->withToken($token)
|
||||
->acceptJson();
|
||||
|
||||
if (strtolower($method) === 'get') {
|
||||
$response = $pending
|
||||
->withHeaders(['Content-Type' => 'application/json'])
|
||||
->send('GET', $url, [
|
||||
'body' => json_encode($payload),
|
||||
]);
|
||||
} else {
|
||||
$response = $pending->asJson()->post($url, $payload);
|
||||
}
|
||||
|
||||
$json = $response->json();
|
||||
if (!is_array($json)) {
|
||||
$body = $response->body();
|
||||
$cloudflare = stripos($body, 'cloudflare') !== false || stripos($body, 'Attention Required') !== false;
|
||||
|
||||
if ($cloudflare) {
|
||||
throw new RuntimeException(
|
||||
'BSAS blocked by Cloudflare (check IP whitelist). HTTP ' . $response->status()
|
||||
);
|
||||
}
|
||||
|
||||
throw new RuntimeException('BSAS returned invalid JSON response.');
|
||||
}
|
||||
|
||||
if (!$response->successful()) {
|
||||
Log::error('BSAS HTTP error', [
|
||||
'method' => $method,
|
||||
'url' => $url,
|
||||
'status' => $response->status(),
|
||||
'body' => $json,
|
||||
]);
|
||||
throw new RuntimeException('BSAS request failed (HTTP ' . $response->status() . ').');
|
||||
}
|
||||
|
||||
Log::info('BSAS API call', [
|
||||
'method' => $method,
|
||||
'path' => $path,
|
||||
'status' => $response->status(),
|
||||
'header' => $json['header'] ?? null,
|
||||
]);
|
||||
|
||||
return $json;
|
||||
}
|
||||
|
||||
protected function http(?int $timeout = null): PendingRequest
|
||||
{
|
||||
$timeout = $timeout ?? (int) config('bsas.http_timeout', 30);
|
||||
|
||||
return Http::withOptions([
|
||||
'timeout' => $timeout,
|
||||
'connect_timeout' => min(15, $timeout),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,374 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Bsas;
|
||||
|
||||
use App\BsasOrder;
|
||||
use App\KomuditiTransaksi;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use RuntimeException;
|
||||
|
||||
class BsasOrderService
|
||||
{
|
||||
/** @var BsasClient */
|
||||
protected $client;
|
||||
|
||||
public function __construct(BsasClient $client = null)
|
||||
{
|
||||
$this->client = $client ?: new BsasClient();
|
||||
}
|
||||
|
||||
/**
|
||||
* Place BSAS order for a gadai Terima, long-poll result, fetch eCert.
|
||||
*
|
||||
* @param array $input norujukan, kodcaw, pinjaman, hargajualan, nama_pelanggan, teller
|
||||
* @return BsasOrder
|
||||
*/
|
||||
public function placeAndConfirm(array $input): BsasOrder
|
||||
{
|
||||
$norujukan = (string) ($input['norujukan'] ?? '');
|
||||
$kodcaw = (string) ($input['kodcaw'] ?? '');
|
||||
$pinjaman = round((float) ($input['pinjaman'] ?? 0), 2);
|
||||
$hargajualan = round((float) ($input['hargajualan'] ?? 0), 2);
|
||||
$counterParty = trim((string) ($input['nama_pelanggan'] ?? ''));
|
||||
$createdBy = (string) ($input['teller'] ?? '');
|
||||
|
||||
if ($norujukan === '' || $kodcaw === '' || $pinjaman <= 0) {
|
||||
throw new RuntimeException('BSAS order requires norujukan, kodcaw and pinjaman.');
|
||||
}
|
||||
|
||||
$existing = BsasOrder::on('mysql7')
|
||||
->where('norujukan', $norujukan)
|
||||
->orderBy('id', 'desc')
|
||||
->first();
|
||||
|
||||
if ($existing && $existing->status === 'confirmed') {
|
||||
if ($this->needsEcertFetch($existing)) {
|
||||
$this->fetchAndStoreEcert($existing);
|
||||
}
|
||||
$this->ensureKomuditiTransaksi($existing, $createdBy);
|
||||
return $existing->fresh();
|
||||
}
|
||||
|
||||
if ($existing && in_array($existing->status, ['pending', 'submitted'], true) && !empty($existing->uuid)) {
|
||||
return $this->completeSubmittedOrder($existing, $createdBy);
|
||||
}
|
||||
|
||||
$serial = '1';
|
||||
$payload = $this->buildOrderPayload($pinjaman, $hargajualan, $counterParty, $serial);
|
||||
|
||||
$order = BsasOrder::on('mysql7')->create([
|
||||
'uuid' => null,
|
||||
'norujukan' => $norujukan,
|
||||
'kodcaw' => $kodcaw,
|
||||
'serial_number' => $serial,
|
||||
'product_code' => config('bsas.product_code'),
|
||||
'bid_value' => $pinjaman,
|
||||
'otc_murabaha_value' => $hargajualan,
|
||||
'otc_counter_party' => $counterParty,
|
||||
'status' => 'pending',
|
||||
'request_payload' => $payload,
|
||||
'created_by' => $createdBy,
|
||||
]);
|
||||
|
||||
try {
|
||||
$orderResponse = $this->client->placeOrder($payload);
|
||||
} catch (\Throwable $e) {
|
||||
$order->status = 'failed';
|
||||
$order->status_message = $e->getMessage();
|
||||
$order->save();
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$order->order_response = $orderResponse;
|
||||
$uuid = data_get($orderResponse, 'header.uuid');
|
||||
$errorCode = trim((string) data_get($orderResponse, 'header.errorCode', ''));
|
||||
$errorMsg = trim((string) data_get($orderResponse, 'header.errorMsg', ''));
|
||||
|
||||
if ($errorCode !== '' || !$uuid) {
|
||||
$order->status = 'failed';
|
||||
$order->status_message = $errorMsg !== '' ? $errorMsg : 'BSAS order rejected (missing uuid or errorCode set).';
|
||||
$order->save();
|
||||
throw new RuntimeException($order->status_message);
|
||||
}
|
||||
|
||||
$bodyStatus = data_get($orderResponse, 'body.0.statusCode');
|
||||
if ($bodyStatus !== null && (int) $bodyStatus !== 0) {
|
||||
$order->uuid = $uuid;
|
||||
$order->status = 'failed';
|
||||
$order->status_code = (int) $bodyStatus;
|
||||
$order->status_message = (string) data_get($orderResponse, 'body.0.statusMessage', 'BSAS order body statusCode != 0');
|
||||
$order->save();
|
||||
throw new RuntimeException($order->status_message);
|
||||
}
|
||||
|
||||
$order->uuid = $uuid;
|
||||
$order->status = 'submitted';
|
||||
$order->save();
|
||||
|
||||
return $this->completeSubmittedOrder($order, $createdBy);
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-query orderResult / eCert for an existing uuid.
|
||||
*/
|
||||
public function refreshByUuid(string $uuid): BsasOrder
|
||||
{
|
||||
$order = BsasOrder::on('mysql7')->where('uuid', $uuid)->first();
|
||||
if (!$order) {
|
||||
throw new RuntimeException('BSAS order not found for uuid.');
|
||||
}
|
||||
|
||||
if ($order->status === 'confirmed') {
|
||||
if ($this->needsEcertFetch($order)) {
|
||||
$this->fetchAndStoreEcert($order);
|
||||
}
|
||||
return $order->fresh();
|
||||
}
|
||||
|
||||
return $this->completeSubmittedOrder($order, (string) $order->created_by);
|
||||
}
|
||||
|
||||
protected function completeSubmittedOrder(BsasOrder $order, string $createdBy): BsasOrder
|
||||
{
|
||||
if (empty($order->uuid)) {
|
||||
throw new RuntimeException('BSAS order has no uuid to poll.');
|
||||
}
|
||||
|
||||
$result = $this->longPollOrderResult($order->uuid, (string) $order->serial_number);
|
||||
$order->result_response = $result;
|
||||
|
||||
$headerError = trim((string) data_get($result, 'header.errorCode', ''));
|
||||
$headerMsg = trim((string) data_get($result, 'header.errorMsg', ''));
|
||||
$statusCode = data_get($result, 'body.0.statusCode');
|
||||
$statusMessage = (string) data_get($result, 'body.0.statusMessage', '');
|
||||
$bidErrNo = trim((string) data_get($result, 'body.0.bidErrNo', ''));
|
||||
$otcErrNo = trim((string) data_get($result, 'body.0.otcErrNo', ''));
|
||||
$stbErrNo = trim((string) data_get($result, 'body.0.stbErrNo', ''));
|
||||
$bidMsg = trim((string) data_get($result, 'body.0.bidMsg', ''));
|
||||
$otcMsg = trim((string) data_get($result, 'body.0.otcMsg', ''));
|
||||
$stbMsg = trim((string) data_get($result, 'body.0.stbMsg', ''));
|
||||
$ecertNo = $this->extractEcertNo($result, $order->order_response);
|
||||
|
||||
if ($headerError !== '') {
|
||||
$order->status = 'failed';
|
||||
$order->status_code = is_numeric($statusCode) ? (int) $statusCode : null;
|
||||
$order->status_message = $headerMsg !== '' ? $headerMsg : 'BSAS orderResult header errorCode set.';
|
||||
$order->save();
|
||||
throw new RuntimeException($order->status_message);
|
||||
}
|
||||
|
||||
// Live BSAS result often has no statusCode; success is ecertNo and/or bid/otc/stb ErrNo=999 (OK).
|
||||
$successByStatusCode = $statusCode !== null && (int) $statusCode === 0;
|
||||
$successByErrNo = ($bidErrNo === '999' || strtoupper($bidMsg) === 'OK')
|
||||
&& ($otcErrNo === '999' || strtoupper($otcMsg) === 'OK')
|
||||
&& ($stbErrNo === '999' || strtoupper($stbMsg) === 'OK');
|
||||
$successByEcert = $ecertNo !== null && $ecertNo !== '';
|
||||
|
||||
if (!$successByStatusCode && !$successByErrNo && !$successByEcert) {
|
||||
if ($statusCode !== null && (int) $statusCode !== 0) {
|
||||
$order->status = 'failed';
|
||||
$order->status_code = (int) $statusCode;
|
||||
$order->status_message = $statusMessage !== '' ? $statusMessage : 'BSAS orderResult statusCode != 0';
|
||||
$order->save();
|
||||
throw new RuntimeException($order->status_message);
|
||||
}
|
||||
|
||||
$order->status = 'submitted';
|
||||
$order->status_message = 'BSAS orderResult belum selesai / tiada ecert.';
|
||||
$order->save();
|
||||
throw new RuntimeException('BSAS orderResult belum selesai. Sila cuba semula.');
|
||||
}
|
||||
|
||||
$order->status_code = $statusCode !== null ? (int) $statusCode : 0;
|
||||
$order->status_message = $statusMessage !== '' ? $statusMessage : ($bidMsg ?: 'OK');
|
||||
$order->status = 'confirmed';
|
||||
if ($ecertNo) {
|
||||
$order->e_cert_no = $ecertNo;
|
||||
}
|
||||
$order->save();
|
||||
|
||||
if ($this->needsEcertFetch($order)) {
|
||||
$this->fetchAndStoreEcert($order);
|
||||
}
|
||||
|
||||
if (empty($order->e_cert_no)) {
|
||||
Log::warning('BSAS order confirmed but ecertno missing', [
|
||||
'norujukan' => $order->norujukan,
|
||||
'uuid' => $order->uuid,
|
||||
]);
|
||||
}
|
||||
|
||||
$this->ensureKomuditiTransaksi($order, $createdBy);
|
||||
|
||||
return $order->fresh();
|
||||
}
|
||||
|
||||
protected function longPollOrderResult(string $uuid, string $serial): array
|
||||
{
|
||||
$retries = max(1, (int) config('bsas.order_result_retries', 2));
|
||||
$last = [];
|
||||
|
||||
for ($i = 0; $i < $retries; $i++) {
|
||||
$last = $this->client->orderResult($uuid, [
|
||||
'serialNumbers' => $serial,
|
||||
'forceYN' => 'Y',
|
||||
'maxWaitTime' => (string) config('bsas.max_wait_time', 10),
|
||||
'waitAllDoneYN' => 'Y',
|
||||
]);
|
||||
|
||||
// Done when statusCode is set, or bid, OTC and STB have all reported.
|
||||
$bidDone = trim((string) data_get($last, 'body.0.bidErrNo', '')) !== '';
|
||||
$otcDone = trim((string) data_get($last, 'body.0.otcErrNo', '')) !== '';
|
||||
$stbDone = trim((string) data_get($last, 'body.0.stbErrNo', '')) !== '';
|
||||
$hasEcert = trim((string) data_get($last, 'body.0.ecertNo', '')) !== ''
|
||||
|| trim((string) data_get($last, 'body.0.eCertNo', '')) !== '';
|
||||
|
||||
if (
|
||||
data_get($last, 'body.0.statusCode') !== null
|
||||
|| ($bidDone && $otcDone && $stbDone)
|
||||
|| ($hasEcert && $stbDone)
|
||||
) {
|
||||
return $last;
|
||||
}
|
||||
}
|
||||
|
||||
return $last;
|
||||
}
|
||||
|
||||
protected function needsEcertFetch(BsasOrder $order): bool
|
||||
{
|
||||
return empty($order->bid_ecert_response)
|
||||
|| empty($order->otc_ecert_response)
|
||||
|| empty($order->stb_ecert_response);
|
||||
}
|
||||
|
||||
protected function fetchAndStoreEcert(BsasOrder $order): void
|
||||
{
|
||||
$ecertNo = $order->e_cert_no;
|
||||
if (!$ecertNo) {
|
||||
$ecertNo = $this->extractEcertNo($order->result_response, $order->order_response);
|
||||
if ($ecertNo) {
|
||||
$order->e_cert_no = $ecertNo;
|
||||
$order->save();
|
||||
}
|
||||
}
|
||||
|
||||
if (!$ecertNo) {
|
||||
return;
|
||||
}
|
||||
|
||||
$calls = [
|
||||
'bid_ecert_response' => 'getBidEcert',
|
||||
'otc_ecert_response' => 'getOtcEcert',
|
||||
'stb_ecert_response' => 'getStbEcert',
|
||||
];
|
||||
|
||||
foreach ($calls as $column => $method) {
|
||||
if (!empty($order->{$column})) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
$ecert = $this->client->{$method}($ecertNo);
|
||||
$order->{$column} = $ecert;
|
||||
if ($column === 'otc_ecert_response' && empty($order->e_cert_no) && !empty($ecert['ECERTNO'])) {
|
||||
$order->e_cert_no = $ecert['ECERTNO'];
|
||||
}
|
||||
$order->save();
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('BSAS eCert fetch failed after confirmed order', [
|
||||
'norujukan' => $order->norujukan,
|
||||
'uuid' => $order->uuid,
|
||||
'e_cert_no' => $ecertNo,
|
||||
'certificate' => $column,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function ensureKomuditiTransaksi(BsasOrder $order, string $teller): void
|
||||
{
|
||||
$exists = KomuditiTransaksi::on('mysql7')
|
||||
->where('norujukan', $order->norujukan)
|
||||
->first();
|
||||
|
||||
if ($exists) {
|
||||
return;
|
||||
}
|
||||
|
||||
$current = Carbon::now();
|
||||
KomuditiTransaksi::on('mysql7')->create([
|
||||
'unit_komuditi' => round((float) $order->bid_value, 2),
|
||||
'nosijil' => $order->e_cert_no ?: $order->uuid,
|
||||
'norujukan' => $order->norujukan,
|
||||
'kodcaw' => $order->kodcaw,
|
||||
'teller' => $teller !== '' ? $teller : $order->created_by,
|
||||
'masa' => $current->toTimeString(),
|
||||
'tarikh' => $current->toDateString(),
|
||||
]);
|
||||
}
|
||||
|
||||
protected function buildOrderPayload(float $pinjaman, float $hargajualan, string $counterParty, string $serial): array
|
||||
{
|
||||
return [
|
||||
'header' => [
|
||||
'memberShortName' => config('bsas.member_short_name'),
|
||||
'uuid' => $this->uuidV4(),
|
||||
],
|
||||
'body' => [
|
||||
'serialNumber' => $serial,
|
||||
'bidOption' => 'Y',
|
||||
'otcOption' => 'Y',
|
||||
'stbOption' => 'Y',
|
||||
'productCode' => config('bsas.product_code'),
|
||||
'purchaseType' => 'P',
|
||||
'clientName' => '',
|
||||
'currency' => 'MYR',
|
||||
'bidValue' => number_format($pinjaman, 2, '.', ''),
|
||||
'valueDate' => Carbon::now()->format('Ymd'),
|
||||
'tenor' => config('bsas.tenor'),
|
||||
'otcCounterParty' => $counterParty,
|
||||
'otcMurabaha' => '',
|
||||
'otcMurabahaValue' => number_format($hargajualan, 2, '.', ''),
|
||||
'eCertNo' => '',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Best-effort extract ecert number from result/order payloads.
|
||||
*/
|
||||
protected function extractEcertNo($result, $orderResponse): ?string
|
||||
{
|
||||
$candidates = [
|
||||
data_get($result, 'body.0.eCertNo'),
|
||||
data_get($result, 'body.0.ecertNo'),
|
||||
data_get($result, 'body.0.ECERTNO'),
|
||||
data_get($result, 'body.0.ecertno'),
|
||||
data_get($result, 'body.0.certificateNo'),
|
||||
data_get($orderResponse, 'body.0.eCertNo'),
|
||||
data_get($orderResponse, 'body.0.ecertNo'),
|
||||
data_get($orderResponse, 'body.0.ECERTNO'),
|
||||
];
|
||||
|
||||
foreach ($candidates as $value) {
|
||||
$value = trim((string) $value);
|
||||
if ($value !== '') {
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function uuidV4(): string
|
||||
{
|
||||
$data = random_bytes(16);
|
||||
$data[6] = chr((ord($data[6]) & 0x0f) | 0x40);
|
||||
$data[8] = chr((ord($data[8]) & 0x3f) | 0x80);
|
||||
|
||||
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Cawangan;
|
||||
use App\Customer;
|
||||
use App\Gadai;
|
||||
use App\ShorakaTransaction;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class ShorakaGadaiService
|
||||
{
|
||||
public function gadai(string $kodcaw, string $norujukan): Gadai
|
||||
{
|
||||
$branch = Cawangan::on('mysql7')->where('kodcaw', $kodcaw)->firstOrFail();
|
||||
return Gadai::on($branch->mysql)->where('kodcaw', $kodcaw)->where('norujukan', $norujukan)->first()
|
||||
?? abort(404, 'Maklumat gadaian tidak tersedia. Semakan diperlukan.');
|
||||
}
|
||||
|
||||
public function payload(Gadai $gadai): array
|
||||
{
|
||||
$customer = Customer::on('mysql7')->where(function ($query) use ($gadai) {
|
||||
$query->where('kpbaru', $gadai->nokp)->orWhere('kplama', $gadai->nokp);
|
||||
})->firstOrFail();
|
||||
if (!$customer->nama || $gadai->pinjaman <= 0 || $gadai->hargajualan < $gadai->pinjaman) {
|
||||
throw ValidationException::withMessages([
|
||||
'norujukan' => 'Nama pelanggan, pembiayaan dan harga jualan mesti lengkap.',
|
||||
]);
|
||||
}
|
||||
|
||||
return [
|
||||
'norujukan' => $gadai->norujukan,
|
||||
'ownership' => $customer->nama,
|
||||
'order_amount' => $gadai->pinjaman,
|
||||
'murabaha_amount' => $gadai->hargajualan,
|
||||
// Both GadaiV1 and GadaiV2 price the contract using upah12.
|
||||
// "tempoh" is elapsed charge time, NOT the contractual tenor.
|
||||
'tenor_other' => 12,
|
||||
];
|
||||
}
|
||||
|
||||
public function transaction(string $kodcaw, string $norujukan)
|
||||
{
|
||||
$order = ShorakaTransaction::where('norujukan', $norujukan)->first();
|
||||
if ($order && (string) $order->kodcaw !== $kodcaw) {
|
||||
abort(409, 'Rekod Shoraka tidak dipadankan dengan cawangan ini.');
|
||||
}
|
||||
return $order;
|
||||
}
|
||||
|
||||
public function sync(ShorakaTransaction $order): void
|
||||
{
|
||||
if (!$order->kodcaw) {
|
||||
return;
|
||||
}
|
||||
$gadai = $this->gadai($order->kodcaw, $order->norujukan);
|
||||
if (!$gadai->exists) {
|
||||
return;
|
||||
}
|
||||
$sameAmounts = number_format((float) $gadai->pinjaman, 2, '.', '') === $order->order_amount
|
||||
&& number_format((float) $gadai->hargajualan, 2, '.', '') === $order->murabaha_amount;
|
||||
$gadai->getConnection()->table('gadai')->where('norujukan', $order->norujukan)->update([
|
||||
'tagkomuditi' => $order->status === 'Completed' && $sameAmounts ? 1 : 0,
|
||||
]);
|
||||
}
|
||||
|
||||
public function assertCompleted(string $kodcaw, string $norujukan): void
|
||||
{
|
||||
$gadai = $this->gadai($kodcaw, $norujukan);
|
||||
$order = $this->transaction($kodcaw, $norujukan);
|
||||
if (!$gadai->exists || !$order || $order->status !== 'Completed'
|
||||
|| number_format((float) $gadai->pinjaman, 2, '.', '') !== $order->order_amount
|
||||
|| number_format((float) $gadai->hargajualan, 2, '.', '') !== $order->murabaha_amount) {
|
||||
abort(409, 'Pembiayaan dan SAG ditahan sehingga transaksi Shoraka selesai dan amaun sepadan.');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Illuminate\Http\Client\Response;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use RuntimeException;
|
||||
|
||||
class ShorakaService
|
||||
{
|
||||
const STATUSES = ['Active', 'Completed', 'Cancelled', 'Pending Sell', 'Take Delivery'];
|
||||
|
||||
const CALLBACK_FIELDS = [
|
||||
'orderId', 'status', 'bankName', 'ownershipName', 'commodityType',
|
||||
'unit', 'volume', 'productType', 'valueDate', 'cancelDate', 'orderType',
|
||||
'orderCurrency', 'orderAmount', 'murabahaAmount', 'tenor',
|
||||
'tenorOther', 'tenorOtherUnit',
|
||||
];
|
||||
|
||||
protected $baseUrl;
|
||||
protected $apiId;
|
||||
protected $secretKey;
|
||||
protected $timeout;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->baseUrl = rtrim((string) config('services.shoraka.base_url'), '/');
|
||||
$this->apiId = (string) config('services.shoraka.api_id');
|
||||
$this->secretKey = (string) config('services.shoraka.secret_key');
|
||||
$this->timeout = (int) config('services.shoraka.timeout', 60);
|
||||
}
|
||||
|
||||
public function configured(): bool
|
||||
{
|
||||
if ($this->simulationRequested()) {
|
||||
return $this->simulationAllowed() && in_array($this->simulationMode(), ['failed', 'pending'], true);
|
||||
}
|
||||
return $this->apiId !== '' && $this->secretKey !== '';
|
||||
}
|
||||
|
||||
protected function simulationAllowed(): bool
|
||||
{
|
||||
return app()->environment('local', 'testing');
|
||||
}
|
||||
|
||||
protected function simulationMode(): string
|
||||
{
|
||||
return strtolower(trim((string) config('services.shoraka.simulation', 'off')));
|
||||
}
|
||||
|
||||
protected function simulationRequested(): bool
|
||||
{
|
||||
return !in_array($this->simulationMode(), ['', 'off'], true);
|
||||
}
|
||||
|
||||
private function simulatedResponse(string $orderId): array
|
||||
{
|
||||
if (!$this->simulationAllowed()) {
|
||||
throw new RuntimeException('Shoraka simulation is restricted to local/testing.');
|
||||
}
|
||||
if (strpos($orderId, 'SIM-FAILED-') === 0) {
|
||||
return ['orderId' => $orderId, 'status' => 'Cancelled'];
|
||||
}
|
||||
if (strpos($orderId, 'SIM-PENDING-') === 0) {
|
||||
return ['orderId' => $orderId, 'status' => 'Active'];
|
||||
}
|
||||
throw new RuntimeException('Invalid simulation order ID.');
|
||||
}
|
||||
|
||||
public function submitOrder(array $data): array
|
||||
{
|
||||
if ($this->simulationRequested()) {
|
||||
if (!$this->simulationAllowed() || !in_array($this->simulationMode(), ['failed', 'pending'], true)) {
|
||||
throw new RuntimeException('Shoraka simulation configuration is not allowed.');
|
||||
}
|
||||
return $this->simulatedResponse('SIM-' . strtoupper($this->simulationMode()) . '-' . bin2hex(random_bytes(12)));
|
||||
}
|
||||
|
||||
$payload = ['api_id' => $this->apiId];
|
||||
foreach ([
|
||||
'product_type', 'commodity_type', 'ownership', 'value_date',
|
||||
'order_currency', 'order_amount', 'murabaha_amount', 'tenor',
|
||||
'tenor_other', 'tenor_other_unit', 'order_type', 'ownership_doc_no',
|
||||
] as $field) {
|
||||
$payload[$field] = $data[$field] ?? '';
|
||||
}
|
||||
foreach (['order_amount', 'murabaha_amount'] as $field) {
|
||||
$payload[$field] = number_format((float) $payload[$field], 2, '.', '');
|
||||
}
|
||||
|
||||
// ownership_doc_no is deliberately excluded by the v1.5 signature contract.
|
||||
$signed = $payload;
|
||||
unset($signed['api_id'], $signed['ownership_doc_no']);
|
||||
$payload['signature'] = $this->signature(array_values($signed));
|
||||
|
||||
return $this->orderResponse($this->request()->post(
|
||||
$this->baseUrl . '/api/submitorder', $payload
|
||||
));
|
||||
}
|
||||
|
||||
public function orderStatus(string $orderId): array
|
||||
{
|
||||
if (strpos($orderId, 'SIM-') === 0) {
|
||||
return $this->simulatedResponse($orderId); // Never send simulated references to the real provider.
|
||||
}
|
||||
if ($this->simulationRequested()) {
|
||||
throw new RuntimeException('Real order status is unavailable while simulation is enabled.');
|
||||
}
|
||||
|
||||
return $this->orderResponse($this->request()->post(
|
||||
$this->baseUrl . '/api/orderstatus', $this->orderPayload($orderId)
|
||||
), $orderId);
|
||||
}
|
||||
|
||||
public function certificate(string $orderId): string
|
||||
{
|
||||
if ($this->simulationRequested() || strpos($orderId, 'SIM-') === 0) {
|
||||
throw new RuntimeException('Certificates are unavailable for simulation.');
|
||||
}
|
||||
|
||||
// Section 5 specifies POST, despite GET in the document history.
|
||||
$response = $this->request()->accept('application/pdf')->post(
|
||||
$this->baseUrl . '/api/certificate', $this->orderPayload($orderId)
|
||||
);
|
||||
$this->checkResponse($response);
|
||||
$type = strtolower(trim(explode(';', $response->header('Content-Type'))[0]));
|
||||
if ($type !== 'application/pdf' || substr($response->body(), 0, 5) !== '%PDF-') {
|
||||
throw new RuntimeException('Shoraka returned an invalid PDF certificate.');
|
||||
}
|
||||
|
||||
return $response->body();
|
||||
}
|
||||
|
||||
public function validCallback(array $payload): bool
|
||||
{
|
||||
if ($this->simulationRequested() || strpos((string) ($payload['orderId'] ?? ''), 'SIM-') === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->configured()
|
||||
|| !isset($payload['apiId'], $payload['signature'])
|
||||
|| !is_string($payload['apiId'])
|
||||
|| !hash_equals($this->apiId, $payload['apiId'])
|
||||
|| !is_string($payload['signature'])
|
||||
|| !preg_match('/\A[0-9a-fA-F]{64}\z/', $payload['signature'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$values = [];
|
||||
foreach (self::CALLBACK_FIELDS as $field) {
|
||||
// Preserve the original strings: decimal formatting affects the hash.
|
||||
if (!array_key_exists($field, $payload) || !is_string($payload[$field])) {
|
||||
return false;
|
||||
}
|
||||
$values[] = $payload[$field];
|
||||
}
|
||||
|
||||
return $payload['orderId'] !== ''
|
||||
&& in_array($payload['status'], self::STATUSES, true)
|
||||
&& hash_equals($this->signature($values), strtolower($payload['signature']));
|
||||
}
|
||||
|
||||
protected function signature(array $values): string
|
||||
{
|
||||
return hash('sha256', implode(';', array_merge(
|
||||
[$this->secretKey, $this->apiId], $values
|
||||
)));
|
||||
}
|
||||
|
||||
protected function orderPayload(string $orderId): array
|
||||
{
|
||||
if ($orderId === '') {
|
||||
throw new RuntimeException('Shoraka order ID is required.');
|
||||
}
|
||||
|
||||
return [
|
||||
'api_id' => $this->apiId,
|
||||
'order_id' => $orderId,
|
||||
'signature' => $this->signature([$orderId]),
|
||||
];
|
||||
}
|
||||
|
||||
protected function request()
|
||||
{
|
||||
if (!$this->configured()) {
|
||||
throw new RuntimeException('Shoraka credentials are not configured.');
|
||||
}
|
||||
|
||||
// Never forward signed requests through redirects or retry a trade automatically.
|
||||
return Http::asForm()->acceptJson()->timeout($this->timeout)
|
||||
->withOptions(['allow_redirects' => false]);
|
||||
}
|
||||
|
||||
protected function checkResponse(Response $response): void
|
||||
{
|
||||
if (!$response->successful()) {
|
||||
// Do not expose upstream bodies which may contain credentials or customer data.
|
||||
throw new RuntimeException('Shoraka request failed. HTTP ' . $response->status());
|
||||
}
|
||||
}
|
||||
|
||||
protected function orderResponse(Response $response, string $expectedId = null): array
|
||||
{
|
||||
$this->checkResponse($response);
|
||||
$data = $response->json();
|
||||
if (!is_array($data)
|
||||
|| !isset($data['orderId'], $data['status'])
|
||||
|| !(is_string($data['orderId']) || is_int($data['orderId']))
|
||||
|| (string) $data['orderId'] === ''
|
||||
|| !in_array($data['status'], self::STATUSES, true)
|
||||
|| ($expectedId !== null && (string) $data['orderId'] !== $expectedId)) {
|
||||
throw new RuntimeException('Shoraka returned an invalid order response.');
|
||||
}
|
||||
if (isset($data['certificateUrl']) && !is_string($data['certificateUrl'])) {
|
||||
throw new RuntimeException('Shoraka returned an invalid certificate URL.');
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ShorakaTransaction extends Model
|
||||
{
|
||||
protected $fillable = [
|
||||
'norujukan',
|
||||
'kodcaw',
|
||||
'teller',
|
||||
'order_id',
|
||||
'status',
|
||||
'product_type',
|
||||
'commodity_type',
|
||||
'ownership_name',
|
||||
'ownership_doc_no',
|
||||
'order_amount',
|
||||
'murabaha_amount',
|
||||
'certificate_url',
|
||||
'certificate_path',
|
||||
'request_payload',
|
||||
'response_payload',
|
||||
'callback_payload',
|
||||
'attempt_count',
|
||||
'error_message',
|
||||
'submitted_at',
|
||||
'completed_at',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'order_amount' => 'decimal:2',
|
||||
'murabaha_amount' => 'decimal:2',
|
||||
'request_payload' => 'array',
|
||||
'response_payload' => 'array',
|
||||
'callback_payload' => 'array',
|
||||
'submitted_at' => 'datetime',
|
||||
'completed_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
@@ -88,9 +88,7 @@ class GadaiV1
|
||||
|
||||
$hargajualan = $request->pinjaman + $upah12;
|
||||
|
||||
$gadai = Gadai::on($cawangan['mysql'])
|
||||
->where('norujukan','=',$norujukan)
|
||||
->update(array(
|
||||
$gadaiFields = array(
|
||||
'nilaimarhun' => $total_nilai_marhun,
|
||||
'berat'=> $total_berat,
|
||||
'pinjaman' => $request->pinjaman,
|
||||
@@ -115,7 +113,8 @@ class GadaiV1
|
||||
'upahdibayar' => 0.00,
|
||||
'tempohbayar' => 0.00,
|
||||
'lelong_tawarruq' => 1
|
||||
));
|
||||
);
|
||||
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan', $norujukan)->update($gadaiFields);
|
||||
|
||||
$new_data = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->first();
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@ use Carbon\Carbon;
|
||||
use App\Gadai;
|
||||
use App\HargaEmas;
|
||||
use App\InOutMar;
|
||||
use App\KomuditiPurchase;
|
||||
use App\KomuditiTransaksi;
|
||||
use App\Marhun;
|
||||
use App\Moratorium;
|
||||
use App\Palsu;
|
||||
@@ -809,19 +807,18 @@ class Penebusan
|
||||
$array_tebus = $request->only(['jeniskeuntungan', 'nopelanggan','jenistebus','addpinjaman','nowakil','marhun','teller','bakipinjaman','bakiupah']);
|
||||
$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);
|
||||
$newReference = $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
|
||||
'data' => 1,
|
||||
'norujukan_baru' => $newReference
|
||||
];
|
||||
|
||||
DB::connection($cawangan['mysql'])->commit();
|
||||
@@ -949,7 +946,7 @@ class Penebusan
|
||||
$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;
|
||||
$new_sirig = (int) ($gadaiTransaction['sirig'] ?? 0) + 1;
|
||||
$curent_year = substr($current->year,2,2);
|
||||
$curent_month = sprintf("%02d", $current->month);
|
||||
$current_day = sprintf("%02d", $current->day);
|
||||
@@ -1077,37 +1074,11 @@ class Penebusan
|
||||
't_update' => $current->toDateString(),
|
||||
));
|
||||
|
||||
return $new_sag_number;
|
||||
}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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ 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;
|
||||
@@ -984,20 +982,19 @@ class Penebusan
|
||||
$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);
|
||||
$newReference = $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
|
||||
'data' => 1,
|
||||
'norujukan_baru' => $newReference
|
||||
];
|
||||
|
||||
DB::connection($cawangan['mysql'])->commit();
|
||||
@@ -1044,19 +1041,18 @@ class Penebusan
|
||||
$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);
|
||||
$newReference = $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
|
||||
'data' => 1,
|
||||
'norujukan_baru' => $newReference
|
||||
];
|
||||
|
||||
DB::connection($cawangan['mysql'])->commit();
|
||||
@@ -1228,7 +1224,7 @@ class Penebusan
|
||||
$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;
|
||||
$new_sirig = (int) ($gadaiTransaction['sirig'] ?? 0) + 1;
|
||||
$curent_year = substr($current->year,2,2);
|
||||
$curent_month = sprintf("%02d", $current->month);
|
||||
$current_day = sprintf("%02d", $current->day);
|
||||
@@ -1356,39 +1352,11 @@ class Penebusan
|
||||
't_update' => $current->toDateString(),
|
||||
));
|
||||
|
||||
return $new_sag_number;
|
||||
}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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ $app->singleton(
|
||||
*/
|
||||
|
||||
$app->configure('app');
|
||||
$app->configure('services');
|
||||
$app->configure('logging');
|
||||
$app->configure('logviewer');
|
||||
$app->configure('tinker');
|
||||
@@ -96,6 +97,7 @@ $app->configure('app_parameter');
|
||||
$app->configure('parameter');
|
||||
$app->configure('whatsapp');
|
||||
$app->configure('kaunter');
|
||||
$app->configure('bsas');
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register Middleware
|
||||
@@ -156,4 +158,7 @@ $app->middleware([
|
||||
$app->register(\Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class);
|
||||
$app->register(\Laravel\Tinker\TinkerServiceProvider::class);
|
||||
$app->register(\App\Providers\AppServiceProvider::class);
|
||||
|
||||
$app->register(\KitLoong\MigrationsGenerator\MigrationsGeneratorServiceProvider::class);
|
||||
|
||||
return $app;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"fzaninotto/faker": "^1.9.1",
|
||||
"kitloong/laravel-migrations-generator": "^6.11",
|
||||
"mockery/mockery": "^1.3.1",
|
||||
"phpunit/phpunit": "^8.5"
|
||||
},
|
||||
|
||||
Generated
+142
-4
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "2a35e67752107934701ceea957a4fd34",
|
||||
"content-hash": "64c3d9455edb548f4cd5ec1f8d9f77be",
|
||||
"packages": [
|
||||
{
|
||||
"name": "auth0/auth0-php",
|
||||
@@ -6686,6 +6686,81 @@
|
||||
},
|
||||
"time": "2020-07-09T08:09:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "kitloong/laravel-migrations-generator",
|
||||
"version": "v6.11.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/kitloong/laravel-migrations-generator.git",
|
||||
"reference": "0f007e86dce6e0cfd71dc0b757da18851c376c3b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/kitloong/laravel-migrations-generator/zipball/0f007e86dce6e0cfd71dc0b757da18851c376c3b",
|
||||
"reference": "0f007e86dce6e0cfd71dc0b757da18851c376c3b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/dbal": "^2.4|^3.0",
|
||||
"ext-pdo": "*",
|
||||
"illuminate/support": "^5.6|^6.0|^7.0|^8.0|^9.0|^10.0",
|
||||
"myclabs/php-enum": "^1.6|^1.7|^1.8",
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"barryvdh/laravel-ide-helper": "^2.5",
|
||||
"friendsofphp/php-cs-fixer": "^2.19.0|^3.1",
|
||||
"larastan/larastan": "^0.4|^0.5|^0.6|^0.7|^1.0|^2.0",
|
||||
"mockery/mockery": "^1.0",
|
||||
"orchestra/testbench": "^3.6|^4.0|^5.0|^6.0|^7.0|^8.0",
|
||||
"phpmd/phpmd": "^2.10",
|
||||
"slevomat/coding-standard": "^6.0|^7.0|^8.5",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"KitLoong\\MigrationsGenerator\\MigrationsGeneratorServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"KitLoong\\MigrationsGenerator\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Kit Loong",
|
||||
"email": "kitloong1008@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Generates Laravel Migrations from an existing database",
|
||||
"keywords": [
|
||||
"artisan",
|
||||
"generator",
|
||||
"laravel",
|
||||
"lumen",
|
||||
"migration",
|
||||
"migrations"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/kitloong/laravel-migrations-generator/issues",
|
||||
"source": "https://github.com/kitloong/laravel-migrations-generator/tree/v6.11.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.buymeacoffee.com/kitloong",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-06T14:42:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mockery/mockery",
|
||||
"version": "1.5.0",
|
||||
@@ -6817,6 +6892,69 @@
|
||||
],
|
||||
"time": "2022-03-03T13:19:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/php-enum",
|
||||
"version": "1.8.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/php-enum.git",
|
||||
"reference": "e7be26966b7398204a234f8673fdad5ac6277802"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/php-enum/zipball/e7be26966b7398204a234f8673fdad5ac6277802",
|
||||
"reference": "e7be26966b7398204a234f8673fdad5ac6277802",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"php": "^7.3 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"squizlabs/php_codesniffer": "1.*",
|
||||
"vimeo/psalm": "^4.6.2 || ^5.2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"MyCLabs\\Enum\\": "src/"
|
||||
},
|
||||
"classmap": [
|
||||
"stubs/Stringable.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP Enum contributors",
|
||||
"homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
|
||||
}
|
||||
],
|
||||
"description": "PHP Enum implementation",
|
||||
"homepage": "https://github.com/myclabs/php-enum",
|
||||
"keywords": [
|
||||
"enum"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/php-enum/issues",
|
||||
"source": "https://github.com/myclabs/php-enum/tree/1.8.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/mnapoli",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-01-14T11:49:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/manifest",
|
||||
"version": "2.0.3",
|
||||
@@ -8389,12 +8527,12 @@
|
||||
],
|
||||
"aliases": [],
|
||||
"minimum-stability": "dev",
|
||||
"stability-flags": [],
|
||||
"stability-flags": {},
|
||||
"prefer-stable": true,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": "^7.2.5"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
"platform-dev": {},
|
||||
"plugin-api-version": "2.9.0"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'base_url' => rtrim(env('BSAS_BASE_URL', 'https://bsasdevapi.bursamalaysia.com/api'), '/'),
|
||||
'token_url' => env('BSAS_TOKEN_URL', 'https://bsasdevapi.bursamalaysia.com/oauth/token'),
|
||||
'client_id' => env('BSAS_CLIENT_ID'),
|
||||
'client_secret' => env('BSAS_CLIENT_SECRET'),
|
||||
'member_short_name' => env('BSAS_MEMBER_SHORT_NAME', 'KOOPPKB'),
|
||||
'product_code' => env('BSAS_PRODUCT_CODE', 'CPO-MSIA-09'),
|
||||
'tenor' => env('BSAS_TENOR', '00088'),
|
||||
'max_wait_time' => (int) env('BSAS_MAX_WAIT_TIME', 10),
|
||||
'http_timeout' => (int) env('BSAS_HTTP_TIMEOUT', 30),
|
||||
'order_result_retries' => (int) env('BSAS_ORDER_RESULT_RETRIES', 2),
|
||||
];
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'shoraka' => [
|
||||
// Local UI tests only: off, failed or pending. Success is deliberately excluded.
|
||||
'simulation' => env('SHORAKA_SIMULATION', 'off'),
|
||||
'base_url' => env(
|
||||
'SHORAKA_BASE_URL',
|
||||
'https://uat2.shorakagroup.com'
|
||||
),
|
||||
|
||||
'api_id' => env('SHORAKA_API_ID'),
|
||||
|
||||
'secret_key' => env('SHORAKA_SECRET_KEY'),
|
||||
|
||||
'timeout' => env(
|
||||
'SHORAKA_TIMEOUT',
|
||||
60
|
||||
),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateShorakaTransactionsTable extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
Schema::create(
|
||||
'shoraka_transactions',
|
||||
function (Blueprint $table) {
|
||||
$table->id();
|
||||
|
||||
// Rujukan pembiayaan dalam eRahn
|
||||
$table->string('norujukan')->unique();
|
||||
|
||||
// Maklumat daripada Shoraka
|
||||
$table->string('order_id')
|
||||
->nullable()
|
||||
->unique();
|
||||
|
||||
$table->string('status')
|
||||
->default('PENDING');
|
||||
|
||||
$table->string('product_type')
|
||||
->default('FINANCING');
|
||||
|
||||
$table->string('commodity_type');
|
||||
|
||||
$table->string('ownership_name');
|
||||
$table->string('ownership_doc_no')
|
||||
->nullable();
|
||||
|
||||
$table->decimal(
|
||||
'order_amount',
|
||||
15,
|
||||
2
|
||||
);
|
||||
|
||||
$table->decimal(
|
||||
'murabaha_amount',
|
||||
15,
|
||||
2
|
||||
);
|
||||
|
||||
$table->string('certificate_url')
|
||||
->nullable();
|
||||
|
||||
$table->string('certificate_path')
|
||||
->nullable();
|
||||
|
||||
// Simpan payload untuk audit dan troubleshooting
|
||||
$table->json('request_payload')
|
||||
->nullable();
|
||||
|
||||
$table->json('response_payload')
|
||||
->nullable();
|
||||
|
||||
$table->json('callback_payload')
|
||||
->nullable();
|
||||
|
||||
$table->unsignedInteger('attempt_count')
|
||||
->default(0);
|
||||
|
||||
$table->text('error_message')
|
||||
->nullable();
|
||||
|
||||
$table->timestamp('submitted_at')
|
||||
->nullable();
|
||||
|
||||
$table->timestamp('completed_at')
|
||||
->nullable();
|
||||
|
||||
$table->timestamps();
|
||||
|
||||
$table->index('status');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('shoraka_transactions');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddKodcawToShorakaTransactions extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
Schema::table('shoraka_transactions', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 20)->nullable()->index();
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::table('shoraka_transactions', function (Blueprint $table) {
|
||||
$table->dropColumn('kodcaw');
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBsasOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Master DB (mysql7) — per-Terima BSAS commodity orders.
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
if (Schema::connection('mysql7')->hasTable('bsas_orders')) {
|
||||
return;
|
||||
}
|
||||
|
||||
Schema::connection('mysql7')->create('bsas_orders', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('uuid', 64)->nullable()->unique();
|
||||
$table->string('norujukan', 50)->index();
|
||||
$table->string('kodcaw', 20)->index();
|
||||
$table->string('serial_number', 20)->default('1');
|
||||
$table->string('product_code', 50)->nullable();
|
||||
$table->decimal('bid_value', 14, 2)->nullable();
|
||||
$table->decimal('otc_murabaha_value', 14, 2)->nullable();
|
||||
$table->string('otc_counter_party', 150)->nullable();
|
||||
$table->string('status', 30)->default('pending')->index();
|
||||
$table->integer('status_code')->nullable();
|
||||
$table->string('status_message', 255)->nullable();
|
||||
$table->string('e_cert_no', 100)->nullable()->index();
|
||||
$table->json('bid_ecert_response')->nullable();
|
||||
$table->json('otc_ecert_response')->nullable();
|
||||
$table->json('stb_ecert_response')->nullable();
|
||||
$table->json('request_payload')->nullable();
|
||||
$table->json('order_response')->nullable();
|
||||
$table->json('result_response')->nullable();
|
||||
$table->string('created_by', 100)->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->index(['norujukan', 'status']);
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql7')->dropIfExists('bsas_orders');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddTellerToShorakaTransactions extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
Schema::table('shoraka_transactions', function (Blueprint $table) {
|
||||
$table->string('teller')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::table('shoraka_transactions', function (Blueprint $table) {
|
||||
$table->dropColumn('teller');
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DropUnusedCawanganTables extends Migration
|
||||
{
|
||||
/**
|
||||
* Empty legacy tables on every branch database.
|
||||
* mysql7 is the master database and is skipped.
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$tables = [
|
||||
'advansur',
|
||||
'alert',
|
||||
'ansrugi',
|
||||
'auditbarcode',
|
||||
'auditdaftar',
|
||||
'auditrekodsemakan',
|
||||
'audtrail',
|
||||
'bajet',
|
||||
'bakipelanggan',
|
||||
'batchlel_xtra',
|
||||
'bayaranpenebusan',
|
||||
'belian',
|
||||
'budgetgadai',
|
||||
'budgettebus',
|
||||
'budgetupah',
|
||||
'checker',
|
||||
'configkaunter',
|
||||
'coordination',
|
||||
'customer',
|
||||
'gadaisimulasi',
|
||||
'gadaitemp',
|
||||
'gadaixtra',
|
||||
'glejer',
|
||||
'hapusgadaionline',
|
||||
'hapuskira',
|
||||
'hargaemasbeli',
|
||||
'hargaemasjual',
|
||||
'imbangan',
|
||||
'imbang_duga_lama',
|
||||
'inoutmarxtra',
|
||||
'jemas00',
|
||||
'jemasbeli',
|
||||
'jemasxtra',
|
||||
'jualan',
|
||||
'jualemas',
|
||||
'jumlahtebus',
|
||||
'karatbeli',
|
||||
'karatjual',
|
||||
'karatxtra',
|
||||
'kawalanstok',
|
||||
'kawalanstokxtra',
|
||||
'kawalanstok_lama',
|
||||
'kumpulan',
|
||||
'kurangxtra',
|
||||
'ku_nm',
|
||||
'ku_nmbaru',
|
||||
'ku_nmxtra',
|
||||
'lapringkasan',
|
||||
'lapterkumpul',
|
||||
'lapterkumpulharian',
|
||||
'lelkarat',
|
||||
'lelmarhun_xtra',
|
||||
'lelongxtra',
|
||||
'marhunbeli',
|
||||
'marhunjual',
|
||||
'marhunsimulasi',
|
||||
'marhunxtra',
|
||||
'model',
|
||||
'outmarhun',
|
||||
'outmarhunxtra',
|
||||
'parameter',
|
||||
'pelelong',
|
||||
'pembeliemas',
|
||||
'pemeriksaan',
|
||||
'pengesahangadai',
|
||||
'pengguna',
|
||||
'percentonline',
|
||||
'polisxtra',
|
||||
'poskod',
|
||||
'ramalan',
|
||||
'rekodtangguh',
|
||||
'sahabat',
|
||||
'senhitam',
|
||||
'serahbaki',
|
||||
'simpanan',
|
||||
'simulasi_batchlel',
|
||||
'simulasi_batchlelxtra',
|
||||
'simulasi_lelmarhun',
|
||||
'simulasi_lelongxtra',
|
||||
'syarikat',
|
||||
'tagpelanggan',
|
||||
'tebuslelong',
|
||||
'tebus_xtra',
|
||||
'tempimbang',
|
||||
'tempnosiri',
|
||||
'tempnosirixtra',
|
||||
'temppwd',
|
||||
'temptarikhaging',
|
||||
'temp_ic',
|
||||
'tunaigadteb',
|
||||
'tuntutan',
|
||||
'tuntutbakixtra',
|
||||
'ubs_code',
|
||||
'zparameter',
|
||||
'zparameter1',
|
||||
];
|
||||
|
||||
foreach ($this->getActiveDB() as $connection) {
|
||||
$this->dropTables($connection, $tables);
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Original table definitions are not kept. This drop cannot be reversed.
|
||||
}
|
||||
|
||||
private function getActiveDB()
|
||||
{
|
||||
$config_db = array_keys(config('database.connections'));
|
||||
|
||||
return array_filter($config_db, function ($connection) {
|
||||
try {
|
||||
if ($connection === 'mysql7') {
|
||||
return false;
|
||||
}
|
||||
|
||||
DB::connection($connection)->getPdo();
|
||||
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private function dropTables($connection, array $tables)
|
||||
{
|
||||
$db = DB::connection($connection);
|
||||
$placeholders = implode(',', array_fill(0, count($tables), '?'));
|
||||
$rows = $db->select(
|
||||
"SELECT TABLE_NAME AS table_name
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_TYPE = 'BASE TABLE'
|
||||
AND LOWER(TABLE_NAME) IN ($placeholders)",
|
||||
$tables
|
||||
);
|
||||
|
||||
if (count($rows) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$quoted = array_map(function ($row) {
|
||||
return '`'.str_replace('`', '``', $row->table_name).'`';
|
||||
}, $rows);
|
||||
|
||||
$db->statement('SET FOREIGN_KEY_CHECKS=0');
|
||||
|
||||
try {
|
||||
$db->statement('DROP TABLE IF EXISTS '.implode(', ', $quoted));
|
||||
} finally {
|
||||
$db->statement('SET FOREIGN_KEY_CHECKS=1');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DropUnusedMasterTables extends Migration
|
||||
{
|
||||
/**
|
||||
* Empty legacy tables on the master database (mysql7).
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$tables = [
|
||||
'approval_withdrawal',
|
||||
'cawangan00',
|
||||
'cawangan_notis',
|
||||
'coordination',
|
||||
'customers_main',
|
||||
'log_blast_sms',
|
||||
'log_blast_wasap',
|
||||
'mobile_payment_info',
|
||||
'mobile_payment_log',
|
||||
'moratorium',
|
||||
'otp_token',
|
||||
'tac_express_payment',
|
||||
];
|
||||
|
||||
$db = DB::connection('mysql7');
|
||||
$placeholders = implode(',', array_fill(0, count($tables), '?'));
|
||||
$rows = $db->select(
|
||||
"SELECT TABLE_NAME AS table_name
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_TYPE = 'BASE TABLE'
|
||||
AND LOWER(TABLE_NAME) IN ($placeholders)",
|
||||
$tables
|
||||
);
|
||||
|
||||
if (count($rows) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$quoted = array_map(function ($row) {
|
||||
return '`'.str_replace('`', '``', $row->table_name).'`';
|
||||
}, $rows);
|
||||
|
||||
$db->statement('SET FOREIGN_KEY_CHECKS=0');
|
||||
|
||||
try {
|
||||
$db->statement('DROP TABLE IF EXISTS '.implode(', ', $quoted));
|
||||
} finally {
|
||||
$db->statement('SET FOREIGN_KEY_CHECKS=1');
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Original table definitions are not kept. This drop cannot be reversed.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAddtunaiTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('addtunai', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('kodcaw', 10)->nullable()->default('');
|
||||
$table->string('kodlaluan', 100)->nullable()->default('');
|
||||
$table->decimal('tambah', 11)->nullable()->default(0);
|
||||
$table->decimal('kurang', 11)->nullable()->default(0);
|
||||
$table->string('nota', 40)->nullable()->default('');
|
||||
$table->integer('bil')->default(0);
|
||||
$table->timestamp('created_at');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('addtunai');
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAkruNetPecahanTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('akru_net_pecahan', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('id');
|
||||
$table->integer('tahun');
|
||||
$table->integer('bulan');
|
||||
$table->decimal('persen_semasa', 9);
|
||||
$table->decimal('ujrah_semasa', 9);
|
||||
$table->decimal('persen_sebelum', 9);
|
||||
$table->decimal('ujrah_sebelum', 9);
|
||||
$table->decimal('keuntungan_semasa_1persen', 9);
|
||||
$table->decimal('keuntungan_semasa_ujrah', 9);
|
||||
$table->decimal('baki_keun_blm_byr_1persen', 9);
|
||||
$table->decimal('baki_keun_blm_byr_ujrah', 9);
|
||||
$table->decimal('pend_akru_1persen', 9);
|
||||
$table->decimal('pend_akru_ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('akru_net_pecahan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAkruNetTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('akru_net', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->decimal('jumlah', 9)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('akru_net');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBandarTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('bandar', function (Blueprint $table) {
|
||||
$table->string('kodbandar', 10)->nullable();
|
||||
$table->string('namabandar', 30)->nullable();
|
||||
$table->string('kodnegeri', 3)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('bandar');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBankTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('bank', function (Blueprint $table) {
|
||||
$table->string('bankcode', 10)->nullable();
|
||||
$table->string('bankdesc', 30)->nullable();
|
||||
$table->string('note', 30)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('bank');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBatalgadaiTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('batalgadai', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->string('tellerid', 50)->nullable();
|
||||
$table->string('namateller', 30)->nullable();
|
||||
$table->date('tarikh');
|
||||
$table->time('masa');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('batalgadai');
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBatchPembiayaanOnlineTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('batch_pembiayaan_online', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('batch_no', 50);
|
||||
$table->string('kodcaw', 20);
|
||||
$table->date('tarikh');
|
||||
$table->string('slot', 20)->nullable()->comment('BATCH1 / BATCH2');
|
||||
$table->integer('bilangan')->default(0);
|
||||
$table->decimal('jumlah_keseluruhan', 12)->default(0);
|
||||
$table->string('status', 30)->default('DRAFT');
|
||||
$table->string('pc_submitted_by', 100)->nullable();
|
||||
$table->timestamp('submitted_at')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->index(['kodcaw', 'tarikh', 'status']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('batch_pembiayaan_online');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBatchlelTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('batchlel', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->string('kodcaw', 10)->default('');
|
||||
$table->integer('batchno');
|
||||
$table->date('tarikh')->nullable()->default('0000-00-00');
|
||||
$table->date('tarikh2')->nullable()->default('0000-00-00');
|
||||
$table->time('masadari')->nullable()->default('00:00:00');
|
||||
$table->time('masahingga')->nullable()->default('00:00:00');
|
||||
$table->string('pilihankos', 1)->default('');
|
||||
$table->decimal('pcntkos', 5)->default(0);
|
||||
$table->decimal('koslelong', 7)->default(0);
|
||||
$table->decimal('jumnm', 11)->default(0);
|
||||
$table->decimal('diskaun', 5)->default(0);
|
||||
$table->string('alamat1', 40)->default('');
|
||||
$table->string('alamat2', 40)->default('');
|
||||
$table->string('alamat3', 40)->default('');
|
||||
$table->string('alamat4', 20)->default('');
|
||||
$table->string('telefon', 30)->default('');
|
||||
$table->integer('nopelelong')->default(0);
|
||||
$table->decimal('percentgst', 3)->default(6);
|
||||
$table->decimal('percentgst_hj', 3)->default(0);
|
||||
$table->date('t_daftar')->nullable();
|
||||
$table->integer('tag_sms')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('batchlel');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBrandTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('brand', function (Blueprint $table) {
|
||||
$table->integer('brandNo');
|
||||
$table->string('brand', 30);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('brand');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateCawanganTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('cawangan', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 10);
|
||||
$table->string('kodnegeri', 3)->nullable();
|
||||
$table->string('namacaw', 80)->nullable();
|
||||
$table->string('alamat1', 60)->nullable();
|
||||
$table->string('alamat2', 60)->nullable();
|
||||
$table->string('alamat3', 60)->nullable();
|
||||
$table->string('alamat4', 60)->nullable();
|
||||
$table->string('notel', 40)->nullable();
|
||||
$table->string('nofaks', 11);
|
||||
$table->date('systemdate')->nullable();
|
||||
$table->decimal('cajkhidmat', 7)->nullable()->default(0);
|
||||
$table->tinyInteger('openst')->nullable()->default(0);
|
||||
$table->string('prkod', 2)->nullable();
|
||||
$table->string('nokotak', 10)->nullable();
|
||||
$table->string('murtahin', 60)->nullable();
|
||||
$table->string('saksi', 60)->nullable();
|
||||
$table->string('glus', 15)->nullable();
|
||||
$table->string('glut', 15)->nullable();
|
||||
$table->decimal('ut_kasar', 15)->default(0);
|
||||
$table->decimal('belanjat', 15)->default(0);
|
||||
$table->decimal('ut_bersih', 15)->default(0);
|
||||
$table->string('msword', 80)->nullable();
|
||||
$table->date('t_aging');
|
||||
$table->string('cawangan', 20)->nullable()->default('Wakaf Bharu');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('cawangan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateDaerahTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('daerah', function (Blueprint $table) {
|
||||
$table->integer('koddaerah')->nullable()->default(0);
|
||||
$table->string('namadaerah', 30)->nullable();
|
||||
$table->string('kodnegeri', 3)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('daerah');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateDenominasiTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('denominasi', function (Blueprint $table) {
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->integer('bd1')->default(0);
|
||||
$table->decimal('b1', 11)->default(0);
|
||||
$table->integer('bd5')->default(0);
|
||||
$table->decimal('b5', 11)->default(0);
|
||||
$table->integer('bd10')->default(0);
|
||||
$table->decimal('b10', 11)->default(0);
|
||||
$table->integer('bd20')->default(0);
|
||||
$table->decimal('b20', 11)->default(0);
|
||||
$table->integer('bd50')->default(0);
|
||||
$table->decimal('b50', 11)->default(0);
|
||||
$table->integer('bd100')->default(0);
|
||||
$table->decimal('b100', 11)->default(0);
|
||||
$table->integer('txtring1')->default(0);
|
||||
$table->decimal('k1', 11)->default(0);
|
||||
$table->integer('txtring5')->default(0);
|
||||
$table->decimal('k5', 11)->default(0);
|
||||
$table->integer('txtsen1')->default(0);
|
||||
$table->decimal('k01', 11)->default(0);
|
||||
$table->integer('txtsen5')->default(0);
|
||||
$table->decimal('k05', 11)->default(0);
|
||||
$table->integer('txtsen10')->default(0);
|
||||
$table->decimal('k010', 11)->default(0);
|
||||
$table->integer('txtsen20')->default(0);
|
||||
$table->decimal('k020', 11)->default(0);
|
||||
$table->integer('txtsen50')->default(0);
|
||||
$table->decimal('k050', 11)->default(0);
|
||||
$table->integer('txtring10')->default(0);
|
||||
$table->decimal('k10', 11)->default(0);
|
||||
$table->integer('txtring20')->default(0);
|
||||
$table->decimal('k20', 11)->default(0);
|
||||
$table->integer('txtring50')->default(0);
|
||||
$table->decimal('k50', 11)->default(0);
|
||||
$table->integer('txtring100')->default(0);
|
||||
$table->decimal('k100', 11)->default(0);
|
||||
$table->integer('txtring1000')->default(0);
|
||||
$table->decimal('k1000', 11)->default(0);
|
||||
$table->decimal('jumlahbundle', 11)->default(0);
|
||||
$table->decimal('txtjumlah', 11)->default(0);
|
||||
$table->string('nota', 100)->nullable();
|
||||
$table->decimal('jumlahkeping', 11)->default(0);
|
||||
$table->decimal('lebihan', 11)->default(0);
|
||||
$table->integer('sd1')->default(0);
|
||||
$table->integer('sd2')->default(0);
|
||||
$table->integer('sd5')->default(0);
|
||||
$table->decimal('s1', 11)->default(0);
|
||||
$table->decimal('s2', 11)->default(0);
|
||||
$table->decimal('s5', 11)->default(0);
|
||||
$table->integer('recno');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('denominasi');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateGadaiTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('gadai', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('norujukan', 20);
|
||||
$table->string('prkod', 2)->nullable();
|
||||
$table->string('nopelanggan', 12)->nullable();
|
||||
$table->string('nokp', 14)->nullable();
|
||||
$table->date('t_gadai')->nullable();
|
||||
$table->time('masa')->nullable();
|
||||
$table->integer('sirig')->nullable()->default(0);
|
||||
$table->decimal('nilaimarhun', 9)->nullable()->default(0);
|
||||
$table->decimal('n_marhuns', 9)->nullable()->default(0);
|
||||
$table->decimal('berat', 7)->nullable()->default(0);
|
||||
$table->decimal('pinjaman', 9)->nullable()->default(0);
|
||||
$table->string('cara_terima', 20)->nullable();
|
||||
$table->decimal('telahbayar', 7)->nullable()->default(0);
|
||||
$table->decimal('upahtelahbyr', 7)->default(0);
|
||||
$table->decimal('cajtelahbyr', 7)->nullable()->default(0);
|
||||
$table->decimal('ansuran', 9)->nullable()->default(0);
|
||||
$table->decimal('ansupah', 7)->nullable()->default(0);
|
||||
$table->decimal('kadarupah', 5)->nullable()->default(0);
|
||||
$table->decimal('tempoh', 10)->default(0);
|
||||
$table->date('t_lanjut1')->nullable();
|
||||
$table->date('t_lanjut2')->nullable();
|
||||
$table->date('t_matang')->nullable();
|
||||
$table->date('t_matang1')->nullable();
|
||||
$table->date('t_matang2')->nullable();
|
||||
$table->date('t_notis1')->nullable();
|
||||
$table->date('t_notis2')->nullable();
|
||||
$table->date('t_notis3')->nullable();
|
||||
$table->date('t_lelong')->nullable();
|
||||
$table->date('t_hapus')->nullable();
|
||||
$table->string('sttebus', 1)->nullable();
|
||||
$table->string('terima', 1)->nullable();
|
||||
$table->integer('cetak')->nullable()->default(0);
|
||||
$table->string('tncek', 1)->nullable();
|
||||
$table->string('nocek', 10)->nullable();
|
||||
$table->string('bkcode', 4)->nullable();
|
||||
$table->string('glcode', 15)->nullable();
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->string('pelulus', 50)->nullable();
|
||||
$table->string('pelulust', 7)->nullable();
|
||||
$table->string('disburseid', 7)->nullable();
|
||||
$table->time('disbursetime')->nullable();
|
||||
$table->string('cancelid', 7)->nullable();
|
||||
$table->time('canceltime')->nullable();
|
||||
$table->string('f_lulus', 1)->nullable();
|
||||
$table->string('tag', 1)->nullable();
|
||||
$table->decimal('jbg', 9)->nullable()->default(0);
|
||||
$table->decimal('bakipjm', 9)->nullable()->default(0);
|
||||
$table->decimal('bakiupah', 9)->nullable()->default(0);
|
||||
$table->decimal('cajlain', 7)->nullable()->default(0);
|
||||
$table->string('marhun')->nullable();
|
||||
$table->string('jenisupah', 1)->nullable();
|
||||
$table->decimal('cajkhidmat', 7)->nullable()->default(0);
|
||||
$table->tinyInteger('stcajkhidmat')->nullable()->default(0);
|
||||
$table->string('kodgl', 15)->nullable();
|
||||
$table->tinyInteger('taglel')->nullable()->default(0);
|
||||
$table->integer('instno')->nullable()->default(0);
|
||||
$table->integer('currInstno')->nullable()->default(0);
|
||||
$table->decimal('ansakhir', 7)->nullable()->default(0);
|
||||
$table->decimal('ansupahakhir', 7)->nullable()->default(0);
|
||||
$table->decimal('jumupahaz', 7)->nullable()->default(0);
|
||||
$table->decimal('tunggakan', 7)->nullable()->default(0);
|
||||
$table->date('t_update')->nullable();
|
||||
$table->string('jantina', 1)->nullable();
|
||||
$table->string('bangsa', 1)->nullable();
|
||||
$table->integer('sirit')->nullable()->default(0);
|
||||
$table->tinyInteger('jenisansur')->nullable()->default(0);
|
||||
$table->string('nokotak', 10)->nullable();
|
||||
$table->tinyInteger('tiada')->nullable()->default(0);
|
||||
$table->integer('tagtbaki')->default(0);
|
||||
$table->string('penilai', 50)->nullable();
|
||||
$table->string('namapenilai', 30)->nullable();
|
||||
$table->integer('tagserah')->default(0);
|
||||
$table->date('tempTarikhAging')->nullable();
|
||||
$table->string('jenistebus', 1);
|
||||
$table->string('namapelulus', 50)->nullable();
|
||||
$table->decimal('percentpinj', 9)->default(0);
|
||||
$table->integer('kuantiti')->default(0);
|
||||
$table->string('namateller', 30)->nullable();
|
||||
$table->decimal('jumtebus', 11)->nullable()->default(0);
|
||||
$table->decimal('upahnotis', 9)->nullable()->default(0);
|
||||
$table->decimal('upahpercuma', 11);
|
||||
$table->integer('tagpalsu')->default(0);
|
||||
$table->decimal('upahdibayar', 10)->default(0);
|
||||
$table->integer('tagcetak');
|
||||
$table->integer('tag_sms')->default(0);
|
||||
$table->string('semakbarcode', 40)->default('Tidak Lulus');
|
||||
$table->integer('wangkeluarteller')->default(0);
|
||||
$table->integer('semakpetibesi')->default(0);
|
||||
$table->integer('semakaudit')->default(0);
|
||||
$table->string('historygadaian', 20)->default('0');
|
||||
$table->integer('tagkiratebus')->default(0);
|
||||
$table->integer('checkbp')->default(0);
|
||||
$table->decimal('pampasan', 9)->default(0);
|
||||
$table->integer('lel1stop')->default(0);
|
||||
$table->string('tellernew', 40);
|
||||
$table->string('idjompay', 25)->default('0');
|
||||
$table->integer('tangguh')->default(0);
|
||||
$table->date('tebus')->nullable();
|
||||
$table->decimal('upahSim', 7)->default(0);
|
||||
$table->decimal('jbgakru', 5)->default(0);
|
||||
$table->decimal('upahakru', 7)->default(0);
|
||||
$table->integer('tagpalsu2')->default(0);
|
||||
$table->integer('tagcall')->default(0);
|
||||
$table->decimal('upah_semasa', 11)->nullable()->default(0);
|
||||
$table->decimal('simulasi_hargaasas', 11)->nullable()->default(0);
|
||||
$table->decimal('simulasi_cajlelong', 11)->nullable()->default(0);
|
||||
$table->decimal('simulasi_bakilelong', 11)->nullable()->default(0);
|
||||
$table->decimal('sim_hargaasas', 9)->nullable()->default(0);
|
||||
$table->decimal('sim_cajlelong', 9)->nullable()->default(0);
|
||||
$table->decimal('sim_upahlelong', 9)->nullable()->default(0);
|
||||
$table->decimal('sim_bakilelong', 9)->nullable()->default(0);
|
||||
$table->decimal('percentrebet', 9)->nullable()->default(0);
|
||||
$table->decimal('rebet', 9)->nullable()->default(0);
|
||||
$table->decimal('upahlpsrebet', 9)->nullable()->default(0);
|
||||
$table->integer('taguploadslip')->nullable()->default(0);
|
||||
$table->integer('tagsahupahonline')->nullable()->default(0);
|
||||
$table->decimal('bayarupahonline', 9)->nullable()->default(0);
|
||||
$table->date('tbayaronline')->nullable();
|
||||
$table->decimal('upahsebenar', 9)->nullable()->default(0);
|
||||
$table->integer('tagupdatedbonline')->nullable()->default(0);
|
||||
$table->decimal('bayarpinjamanonline', 9)->nullable()->default(0);
|
||||
$table->string('jenis_bayaran', 5)->nullable();
|
||||
$table->decimal('upah12', 9)->nullable();
|
||||
$table->decimal('hargajualan', 9)->nullable();
|
||||
$table->decimal('bakihargajualan', 9)->nullable();
|
||||
$table->tinyInteger('tagkomuditi')->nullable();
|
||||
$table->tinyInteger('lelong_tawarruq')->nullable()->default(1);
|
||||
$table->float('tempohbayar', 10)->default(0);
|
||||
$table->char('tag_tebus', 2);
|
||||
$table->decimal('kadarujrah', 5);
|
||||
$table->decimal('ujrah', 9);
|
||||
$table->decimal('onepercent', 9);
|
||||
$table->decimal('margin_semasa', 5);
|
||||
$table->tinyInteger('tagbaru')->default(0);
|
||||
$table->decimal('tunggakanujrah', 9);
|
||||
$table->decimal('tunggakanonepercent', 9);
|
||||
$table->tinyInteger('tagnotis')->default(0);
|
||||
$table->decimal('kadarrebet', 8, 4)->nullable()->default(0);
|
||||
$table->decimal('diskaun', 12)->nullable()->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('gadai');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateGlcodeTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('glcode', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('glcode', 15)->nullable();
|
||||
$table->string('descpt', 40)->nullable();
|
||||
$table->string('acttype', 1)->nullable();
|
||||
$table->string('jenisakaun', 10)->nullable();
|
||||
$table->tinyInteger('bayaran')->nullable()->default(0);
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->decimal('amaun', 15)->nullable()->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('glcode');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateGldetailTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('gldetail', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->integer('recno');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('dtacct', 15)->nullable();
|
||||
$table->string('ktacct', 15)->nullable();
|
||||
$table->string('descpt', 40)->nullable();
|
||||
$table->string('acttype', 1)->nullable();
|
||||
$table->string('fracttype', 1)->nullable();
|
||||
$table->decimal('amaun', 13)->default(0);
|
||||
$table->string('teller', 7)->nullable();
|
||||
$table->string('pelulus', 7)->nullable();
|
||||
$table->string('terima', 1)->nullable();
|
||||
$table->string('jenisbyr', 2)->nullable();
|
||||
$table->string('bkcode', 4)->nullable();
|
||||
$table->string('nocek', 6)->nullable();
|
||||
$table->decimal('pendahuluan', 13)->nullable()->default(0);
|
||||
$table->decimal('serahan', 13)->nullable()->default(0);
|
||||
$table->timestamp('date_created');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('gldetail');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateHargaemasTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('hargaemas', function (Blueprint $table) {
|
||||
$table->string('karat', 5)->nullable();
|
||||
$table->date('t_efektif')->nullable();
|
||||
$table->decimal('harga', 7)->nullable()->default(0);
|
||||
$table->time('m_efektif');
|
||||
$table->decimal('harga2', 5);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('hargaemas');
|
||||
}
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateImbangDugaBackupTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('imbang_duga_backup', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->decimal('tunaiditangan', 11)->nullable();
|
||||
$table->decimal('pembiayaantawarruq', 11)->nullable();
|
||||
$table->decimal('bayaranpendahuluan', 11)->nullable();
|
||||
$table->decimal('pinjamankoop', 11)->nullable();
|
||||
$table->decimal('emaspalsu', 11)->nullable();
|
||||
$table->decimal('serahan', 11)->nullable();
|
||||
$table->decimal('bds', 11)->nullable();
|
||||
$table->decimal('perubatan', 11)->nullable();
|
||||
$table->decimal('keraian', 11)->nullable();
|
||||
$table->decimal('rugilelong', 11)->nullable();
|
||||
$table->decimal('bakilelong', 11)->nullable();
|
||||
$table->decimal('wtd', 11)->nullable();
|
||||
$table->decimal('untungrugiterkumpul', 11)->nullable();
|
||||
$table->decimal('keun_sebenar', 11)->nullable();
|
||||
$table->decimal('pendahuluan', 11)->nullable();
|
||||
$table->decimal('cajlelong', 11)->nullable();
|
||||
$table->decimal('pindahkekpkb', 11)->nullable();
|
||||
$table->decimal('penghutangkaki', 11)->nullable();
|
||||
$table->decimal('phapuskira', 11)->nullable();
|
||||
$table->decimal('belian1stop', 11)->nullable();
|
||||
$table->decimal('keun_penggadai', 11)->nullable();
|
||||
$table->decimal('pend_terakru', 11)->nullable();
|
||||
$table->decimal('cajperkhidmatan', 11)->nullable();
|
||||
$table->decimal('cajlelongxtra', 11)->nullable();
|
||||
$table->decimal('upahsimpanxtra', 11)->nullable();
|
||||
$table->decimal('bakilelongxtra', 11)->nullable();
|
||||
$table->decimal('rugilelongxtra', 11)->nullable();
|
||||
$table->decimal('utgterkumpulxtra', 11)->nullable();
|
||||
$table->decimal('jualan1stop', 11)->nullable();
|
||||
$table->decimal('hapuskira', 11)->nullable();
|
||||
$table->decimal('totalharta', 11)->nullable();
|
||||
$table->decimal('totaltanggungan', 11)->nullable();
|
||||
$table->integer('tagtally')->nullable();
|
||||
$table->timestamps();
|
||||
$table->decimal('ujrah', 9);
|
||||
$table->decimal('onepercent', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('imbang_duga_backup');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateInoutmarTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('inoutmar', function (Blueprint $table) {
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->time('masa')->nullable();
|
||||
$table->string('norujukan', 14)->nullable();
|
||||
$table->decimal('nm', 9)->nullable();
|
||||
$table->string('kpd', 20)->nullable();
|
||||
$table->string('drp', 20)->nullable();
|
||||
$table->decimal('bln', 3, 0)->nullable();
|
||||
$table->decimal('thn', 5, 0)->nullable();
|
||||
$table->tinyInteger('tag')->nullable();
|
||||
$table->string('jenistebus', 2);
|
||||
$table->string('namateller', 30);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('inoutmar');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateJemasTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('jemas', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->string('marhun', 30)->nullable();
|
||||
$table->string('descpt', 30)->nullable();
|
||||
$table->integer('ordernum');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('jemas');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateJenisakaunTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('jenisakaun', function (Blueprint $table) {
|
||||
$table->integer('recno')->default(0);
|
||||
$table->string('kod', 1)->nullable();
|
||||
$table->string('keterangan', 20)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('jenisakaun');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateKaratTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('karat', function (Blueprint $table) {
|
||||
$table->string('karat', 10)->nullable();
|
||||
$table->string('keterangan', 20)->nullable();
|
||||
$table->decimal('harga', 5)->nullable();
|
||||
$table->integer('recno');
|
||||
$table->decimal('harga2', 5)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('karat');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateLelmarhunTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('lelmarhun', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->date('t_gadai')->nullable();
|
||||
$table->decimal('bil', 3, 0)->nullable();
|
||||
$table->string('marhun', 30)->nullable();
|
||||
$table->string('nota', 30)->nullable();
|
||||
$table->string('karat', 10)->nullable();
|
||||
$table->decimal('berat', 7)->nullable();
|
||||
$table->decimal('harga', 5)->nullable();
|
||||
$table->decimal('n_marhun', 9)->nullable();
|
||||
$table->integer('batch_no')->nullable();
|
||||
$table->decimal('hargaasas', 11)->nullable();
|
||||
$table->integer('recno');
|
||||
$table->decimal('hargaasas_sim', 7)->nullable();
|
||||
$table->decimal('beratasal', 11)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('lelmarhun');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateLelongTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('lelong', function (Blueprint $table) {
|
||||
$table->integer('batchno')->default(0);
|
||||
$table->integer('sirilel')->nullable();
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->date('t_lelong')->nullable();
|
||||
$table->decimal('hargaasas', 9)->nullable()->default(0);
|
||||
$table->decimal('sandaran', 11)->default(0);
|
||||
$table->decimal('hargajual', 9)->nullable()->default(0);
|
||||
$table->string('glcode', 15)->nullable();
|
||||
$table->date('t_jual')->nullable();
|
||||
$table->integer('nopembeli')->nullable()->default(0);
|
||||
$table->decimal('jbg', 7)->nullable()->default(0);
|
||||
$table->decimal('kadarupah', 5)->default(0);
|
||||
$table->decimal('upahsimpan', 7)->nullable();
|
||||
$table->decimal('ansuran', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->default(0);
|
||||
$table->decimal('pinjaman', 9)->default(0);
|
||||
$table->decimal('bakipjmas', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('bakiupahas', 7)->nullable();
|
||||
$table->decimal('bakiupah', 9)->default(0);
|
||||
$table->decimal('cajlainas', 7)->nullable();
|
||||
$table->decimal('cajlain', 7)->nullable();
|
||||
$table->decimal('cajlelongas', 7)->nullable();
|
||||
$table->decimal('cajlelong', 7)->default(0);
|
||||
$table->decimal('baki', 9)->default(0);
|
||||
$table->string('terima', 1)->nullable();
|
||||
$table->tinyInteger('cetak')->default(0);
|
||||
$table->string('teller', 20)->nullable();
|
||||
$table->string('pelulus', 20)->nullable();
|
||||
$table->string('pelulust', 7)->nullable();
|
||||
$table->string('f_lulus', 1)->nullable();
|
||||
$table->string('type', 1)->nullable();
|
||||
$table->string('prkod', 2)->nullable();
|
||||
$table->tinyInteger('tagsurat')->nullable();
|
||||
$table->date('trkhtuntut')->nullable();
|
||||
$table->string('tellertb', 7)->nullable();
|
||||
$table->string('pelulustb', 7)->nullable();
|
||||
$table->string('terimatb', 1)->nullable();
|
||||
$table->date('t_hapuskira')->nullable();
|
||||
$table->decimal('hapuskira', 7)->nullable();
|
||||
$table->decimal('hkpjm', 9)->nullable();
|
||||
$table->string('cancelid', 7)->nullable();
|
||||
$table->time('canceltime')->nullable();
|
||||
$table->string('kodgl', 15)->nullable();
|
||||
$table->date('t_update')->nullable();
|
||||
$table->decimal('berat', 7)->default(0);
|
||||
$table->string('marhun')->nullable();
|
||||
$table->integer('recno');
|
||||
$table->decimal('lebihkurang', 9)->default(0);
|
||||
$table->decimal('nilaimarhuns', 9)->default(0);
|
||||
$table->integer('tagaid')->nullable();
|
||||
$table->decimal('gst_hj', 7)->nullable();
|
||||
$table->decimal('gst_cl', 7)->nullable();
|
||||
$table->decimal('hargajual_sim', 7)->nullable();
|
||||
$table->decimal('cajlelong_sim', 7)->nullable();
|
||||
$table->decimal('gst_hj_sim', 7)->nullable();
|
||||
$table->decimal('gst_cl_sim', 7)->nullable();
|
||||
$table->decimal('bakiupah_sim', 7)->nullable();
|
||||
$table->decimal('hargaasas_sim', 7)->nullable();
|
||||
$table->string('mutu_terendah', 10)->nullable();
|
||||
$table->decimal('harga_baru', 7)->nullable();
|
||||
$table->decimal('turun', 7)->nullable();
|
||||
$table->decimal('percent', 7)->nullable();
|
||||
$table->decimal('baki_sim', 7)->nullable();
|
||||
$table->decimal('hargalama', 7)->nullable();
|
||||
$table->date('t_lelong_sim')->nullable();
|
||||
$table->integer('tag_gst')->nullable();
|
||||
$table->decimal('makan_pinj', 7)->nullable();
|
||||
$table->decimal('baki_upah6', 7)->nullable();
|
||||
$table->decimal('baki6', 7)->nullable();
|
||||
$table->decimal('rugi_asal', 9)->default(0);
|
||||
$table->string('tagpelanggan', 20)->nullable()->default('99');
|
||||
$table->integer('fasa')->default(0);
|
||||
$table->decimal('pmt', 11)->nullable();
|
||||
$table->string('tagpmt', 20)->nullable();
|
||||
$table->decimal('hargaasasasal', 11)->nullable();
|
||||
$table->decimal('beratasal', 11)->default(0);
|
||||
$table->integer(' loopsemak')->nullable();
|
||||
$table->integer('lel1stop')->default(0);
|
||||
$table->integer('jbg_lelong')->default(0);
|
||||
$table->decimal('berat_plastik', 11)->nullable()->default(0);
|
||||
$table->integer('status_bida_online')->default(0);
|
||||
$table->string('nopelanggan', 14)->nullable();
|
||||
$table->integer('tag_tbaki')->nullable();
|
||||
$table->string('pel_tbaki', 20)->default('0');
|
||||
$table->integer('tagcall')->default(0);
|
||||
$table->decimal('ujrah', 9);
|
||||
$table->decimal('onepercent', 9);
|
||||
$table->tinyInteger('tagujrah')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('lelong');
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateLelongTebusTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('lelong_tebus', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->string('norujukan', 30)->nullable();
|
||||
$table->string('batch_no', 10)->nullable();
|
||||
$table->decimal('nilai_marhun', 11)->nullable();
|
||||
$table->decimal('pinjaman', 11)->nullable();
|
||||
$table->decimal('upah', 11)->nullable();
|
||||
$table->integer('jbg')->nullable();
|
||||
$table->string('jenis_tebus', 10)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('lelong_tebus');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateMarhunTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('marhun', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 3)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->date('t_gadai')->nullable();
|
||||
$table->decimal('bil', 3, 0)->nullable();
|
||||
$table->string('marhun', 30)->nullable();
|
||||
$table->string('nota', 30)->nullable();
|
||||
$table->string('karat', 10)->nullable();
|
||||
$table->decimal('berat', 7)->nullable();
|
||||
$table->decimal('harga', 5)->nullable();
|
||||
$table->decimal('n_marhun', 9)->nullable();
|
||||
$table->tinyInteger('tags')->nullable();
|
||||
$table->tinyInteger('cfmlelong')->nullable();
|
||||
$table->decimal('hargas', 5)->nullable();
|
||||
$table->decimal('n_marhuns', 7)->nullable();
|
||||
$table->integer('recno');
|
||||
$table->integer('new')->nullable();
|
||||
$table->date('ttag')->nullable();
|
||||
$table->decimal('hel', 9)->nullable();
|
||||
$table->decimal('nml', 9)->nullable();
|
||||
$table->decimal('berat_batu_permata', 7)->nullable();
|
||||
$table->integer('tag_permata')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('marhun');
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateModalOnlineTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('modal_online', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->date('tarikh');
|
||||
$table->string('kodcaw', 20);
|
||||
$table->decimal('had', 12)->default(100000);
|
||||
$table->decimal('digunakan', 12)->default(0);
|
||||
$table->decimal('baki', 12)->default(100000);
|
||||
$table->decimal('tambah', 12)->default(0);
|
||||
$table->decimal('kurang', 12)->default(0);
|
||||
$table->tinyInteger('ditutup')->default(0);
|
||||
$table->string('ditutup_oleh', 100)->nullable();
|
||||
$table->timestamp('ditutup_at')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->unique(['tarikh', 'kodcaw']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('modal_online');
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateMohonAnggotaTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('mohon_anggota', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('id');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('nokp', 20)->nullable();
|
||||
$table->string('nama', 100)->nullable();
|
||||
$table->string('status', 50)->default('MENUNGGU OPERASI');
|
||||
$table->text('komen')->nullable();
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->string('peloperasi', 100)->nullable();
|
||||
$table->dateTime('datetime_pelulus')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('mohon_anggota');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateMohonTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('mohon', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('norujukan', 20);
|
||||
$table->decimal('siri', 9, 0)->default(0);
|
||||
$table->mediumText('komen')->nullable();
|
||||
$table->date('lastdategadai')->nullable();
|
||||
$table->integer('bilgad')->default(0);
|
||||
$table->decimal('jumpinj', 9)->default(0);
|
||||
$table->string('jenistebus', 2);
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->string('pelulus', 100);
|
||||
$table->string('peloperasi', 100);
|
||||
$table->string('masalulus', 100);
|
||||
$table->string('khazanah', 100);
|
||||
$table->string('operasi', 100);
|
||||
$table->decimal('margin', 10)->nullable();
|
||||
$table->decimal('nilaimarhun', 10)->nullable();
|
||||
$table->decimal('berat', 10)->nullable();
|
||||
$table->string('status', 100)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('mohon');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateMohonidTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('mohonid', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->time('masa')->nullable()->comment('Time period');
|
||||
$table->string('onlineid', 40)->nullable();
|
||||
$table->string('mohon', 40)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->string('id', 40)->nullable();
|
||||
$table->timestamp('timestamp_approved_by_pc')->nullable()->comment('Time Approved by PC');
|
||||
$table->string('katalaluan', 50)->nullable();
|
||||
$table->integer('benar')->nullable();
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->decimal('pinjaman', 10)->nullable();
|
||||
$table->decimal('ansuran', 10)->default(0)->comment('Ansuran Amount');
|
||||
$table->decimal('nilaimarhun', 10)->nullable();
|
||||
$table->decimal('berat', 10)->nullable();
|
||||
$table->decimal('margin', 4)->nullable();
|
||||
$table->boolean('tagoperasi')->default(false)->comment('Tag Operasi');
|
||||
$table->string('operasi')->nullable()->comment('Nama Operasi');
|
||||
$table->timestamp('timestamp_approved_by_operasi')->nullable()->comment('Time approved by Operasi');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('mohonid');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateNegeriTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('negeri', function (Blueprint $table) {
|
||||
$table->string('kodnegeri', 3)->nullable();
|
||||
$table->string('negeri', 25)->nullable();
|
||||
$table->string('cutiumum', 1)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('negeri');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePalsuTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('palsu', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->string('teller', 20)->nullable();
|
||||
$table->string('nota', 100)->nullable();
|
||||
$table->decimal('pembiayaan', 11)->nullable()->comment('Pembiayaan amount');
|
||||
$table->decimal('nilaimarhun', 11)->nullable()->comment('Nilai marhun amount');
|
||||
$table->double('jbg', 4, 2)->nullable()->comment('JBG value');
|
||||
$table->decimal('untung', 11)->nullable()->comment('Untung amount');
|
||||
$table->decimal('untungonepercent', 11)->nullable()->comment('Satu Persen amount');
|
||||
$table->decimal('untungcajlain', 11)->nullable()->comment('Caj Lain-Lain amount');
|
||||
$table->string('jenis', 50)->nullable()->comment('Jenis/Type classification');
|
||||
$table->unsignedSmallInteger('status')->default(0)->comment('Status value');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('palsu');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePampasanTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('pampasan', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('norujukan', 50)->unique();
|
||||
$table->string('baucerno', 30)->index();
|
||||
$table->string('kodcaw', 20)->index();
|
||||
$table->decimal('jumlah_pampasan', 11);
|
||||
$table->json('denominasi')->nullable();
|
||||
$table->string('teller', 100);
|
||||
$table->tinyInteger('status')->default(0)->comment('0 = belum dituntut, 1 = dituntut');
|
||||
$table->timestamps();
|
||||
$table->timestamp('agreement_printed_at')->nullable()->comment('Timestamp when agreement was printed');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('pampasan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePanjarTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('panjar', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('deskripsi', 100)->nullable();
|
||||
$table->decimal('bayaran', 11)->nullable();
|
||||
$table->longText('nota')->nullable();
|
||||
$table->integer('tag')->nullable();
|
||||
$table->string('kategori', 40)->nullable();
|
||||
$table->string('nama', 40);
|
||||
$table->string('id', 40)->nullable();
|
||||
$table->decimal('bakiperubatan', 11)->nullable();
|
||||
$table->string('nobaucer', 15)->nullable();
|
||||
$table->integer('nobil')->nullable();
|
||||
$table->string('tuntutoleh', 40)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('panjar');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePekerjaanTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('pekerjaan', function (Blueprint $table) {
|
||||
$table->string('kodkerja', 2)->nullable();
|
||||
$table->string('keterangan', 30)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('pekerjaan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePembeliTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('pembeli', function (Blueprint $table) {
|
||||
$table->integer('nopembeli');
|
||||
$table->string('nokp', 14)->nullable();
|
||||
$table->string('nama', 100)->nullable();
|
||||
$table->string('alamat1', 300)->nullable();
|
||||
$table->string('alamat2', 40)->nullable();
|
||||
$table->string('alamat3', 40)->nullable();
|
||||
$table->string('alamat4', 20)->nullable();
|
||||
$table->string('telefon', 20)->nullable();
|
||||
$table->integer('tag_syarikat')->nullable()->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('pembeli');
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePembiayaanOnlineTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('pembiayaan_online', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('norujukan', 50)->index();
|
||||
$table->string('nokp', 20);
|
||||
$table->string('nopelanggan', 50)->nullable();
|
||||
$table->string('nama_pelanggan', 150)->nullable();
|
||||
$table->string('kodcaw', 20);
|
||||
$table->decimal('pinjaman', 12);
|
||||
$table->string('kodbank', 20)->nullable();
|
||||
$table->string('nama_bank', 100)->nullable();
|
||||
$table->string('noakaun', 50)->nullable();
|
||||
$table->string('nama_akaun', 150)->nullable();
|
||||
$table->unsignedBigInteger('bukti_akaun_file_id')->nullable();
|
||||
$table->unsignedBigInteger('borang_file_id')->nullable();
|
||||
$table->string('status', 30)->default('PENDING_PC');
|
||||
$table->text('reject_reason')->nullable();
|
||||
$table->string('rejected_by', 100)->nullable();
|
||||
$table->timestamp('rejected_at')->nullable();
|
||||
$table->unsignedBigInteger('batch_id')->nullable()->index();
|
||||
$table->unsignedBigInteger('bukti_file_id')->nullable();
|
||||
$table->string('no_rujukan_bayaran', 100)->nullable();
|
||||
$table->date('tarikh_bayaran')->nullable();
|
||||
$table->timestamp('paid_at')->nullable();
|
||||
$table->string('created_by', 100)->nullable();
|
||||
$table->string('pc_submitted_by', 100)->nullable();
|
||||
$table->string('pc_verified_by', 100)->nullable();
|
||||
$table->timestamp('pc_verified_at')->nullable();
|
||||
$table->string('ops_by', 100)->nullable();
|
||||
$table->text('nota')->nullable();
|
||||
$table->tinyInteger('blast_sent')->default(0);
|
||||
$table->timestamps();
|
||||
|
||||
$table->index(['kodcaw', 'status']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('pembiayaan_online');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePeratusanTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('peratusan', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->date('tarikhawal')->nullable();
|
||||
$table->date('tarikhakhir')->nullable();
|
||||
$table->decimal('upah', 11)->nullable();
|
||||
$table->decimal('gadai', 11)->nullable();
|
||||
$table->decimal('tebus', 11)->nullable();
|
||||
$table->decimal('bakipb', 11)->nullable();
|
||||
$table->decimal('nmgad', 9)->nullable();
|
||||
$table->decimal('nmteb', 9)->nullable();
|
||||
$table->integer('statgad')->nullable();
|
||||
$table->integer('statteb')->nullable();
|
||||
$table->integer('statpel')->nullable();
|
||||
$table->decimal('per', 9)->nullable();
|
||||
$table->integer('bilper')->nullable();
|
||||
$table->integer('perbilper')->nullable();
|
||||
$table->decimal('pinj', 9)->nullable();
|
||||
$table->integer('perpinj')->nullable();
|
||||
$table->decimal('nm', 9)->nullable();
|
||||
$table->decimal('overpinj', 9)->nullable();
|
||||
$table->decimal('pinjover', 9)->nullable();
|
||||
$table->integer('bilpinjover')->nullable();
|
||||
$table->decimal('nmover', 9)->nullable();
|
||||
$table->decimal('berat14', 7)->nullable();
|
||||
$table->decimal('nm14', 9)->nullable();
|
||||
$table->decimal('nms14', 9)->nullable();
|
||||
$table->decimal('beratm14', 7)->nullable();
|
||||
$table->decimal('nmsm14', 9)->nullable();
|
||||
$table->decimal('berat18', 7, 1)->nullable();
|
||||
$table->decimal('nm18', 9)->nullable();
|
||||
$table->decimal('nms18', 9)->nullable();
|
||||
$table->decimal('beratm18', 7)->nullable();
|
||||
$table->decimal('nmsm18', 9)->nullable();
|
||||
$table->decimal('berat20', 7)->nullable();
|
||||
$table->decimal('nm20', 9)->nullable();
|
||||
$table->decimal('nms20', 9)->nullable();
|
||||
$table->decimal('beratm20', 7)->nullable();
|
||||
$table->decimal('nmsm20', 9)->nullable();
|
||||
$table->decimal('berat21', 7)->nullable();
|
||||
$table->decimal('nm21', 9)->nullable();
|
||||
$table->decimal('nms21', 9)->nullable();
|
||||
$table->decimal('beratm21', 7)->nullable();
|
||||
$table->decimal('nmsm21', 9)->nullable();
|
||||
$table->decimal('berat22', 7)->nullable();
|
||||
$table->decimal('nm22', 9)->nullable();
|
||||
$table->decimal('nms22', 9)->nullable();
|
||||
$table->decimal('beratm22', 7)->nullable();
|
||||
$table->decimal('nmsm22', 9)->nullable();
|
||||
$table->decimal('berat23', 7)->nullable();
|
||||
$table->decimal('nm23', 9)->nullable();
|
||||
$table->decimal('nms23', 9)->nullable();
|
||||
$table->decimal('beratm23', 7)->nullable();
|
||||
$table->decimal('nmsm23', 9)->nullable();
|
||||
$table->decimal('berat24', 7)->nullable();
|
||||
$table->decimal('nm24', 9)->nullable();
|
||||
$table->decimal('nms24', 9)->nullable();
|
||||
$table->decimal('beratm24', 7)->nullable();
|
||||
$table->decimal('nmsm24', 9)->nullable();
|
||||
$table->decimal('jumberat', 7)->nullable();
|
||||
$table->decimal('jumnm', 9)->nullable();
|
||||
$table->decimal('jumnms', 9)->nullable();
|
||||
$table->decimal('jumberatm', 7)->nullable();
|
||||
$table->decimal('jumnmsm', 9)->nullable();
|
||||
$table->decimal('bezarm', 10)->nullable();
|
||||
$table->decimal('bezaper', 3)->nullable();
|
||||
$table->decimal('jumberath', 11)->nullable();
|
||||
$table->decimal('jumnmh', 11)->nullable();
|
||||
$table->decimal('jumnmsh', 11)->nullable();
|
||||
$table->decimal('jumberatb', 11)->nullable();
|
||||
$table->decimal('jumnmsb', 11)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('peratusan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreatePolisTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('polis', function (Blueprint $table) {
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->string('komen1', 30)->nullable();
|
||||
$table->string('komen2', 30)->nullable();
|
||||
$table->tinyInteger('tebus')->nullable();
|
||||
$table->integer('recno');
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->decimal('caj', 9)->default(0);
|
||||
$table->string('kodnegeri', 3)->nullable();
|
||||
$table->string('koddaerah', 3)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('polis');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateProductTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('product', function (Blueprint $table) {
|
||||
$table->string('prkod', 2);
|
||||
$table->string('database', 8)->nullable();
|
||||
$table->string('keterangan', 20)->nullable();
|
||||
$table->integer('tempoh')->nullable();
|
||||
$table->integer('tempohmax')->nullable();
|
||||
$table->decimal('pinjaman', 7)->nullable();
|
||||
$table->decimal('pinjaman2', 7)->nullable();
|
||||
$table->decimal('marginmin', 5)->nullable();
|
||||
$table->decimal('marginmax', 5)->nullable();
|
||||
$table->decimal('marginansur', 7)->nullable();
|
||||
$table->string('laporan', 40)->nullable();
|
||||
$table->integer('lanjut1')->nullable();
|
||||
$table->integer('lanjut2')->nullable();
|
||||
$table->integer('matang')->nullable();
|
||||
$table->integer('notis1')->nullable();
|
||||
$table->integer('notis2')->nullable();
|
||||
$table->integer('notis3')->nullable();
|
||||
$table->tinyInteger('nt1')->nullable();
|
||||
$table->tinyInteger('nt2')->nullable();
|
||||
$table->tinyInteger('nt3')->nullable();
|
||||
$table->tinyInteger('nt1a')->nullable();
|
||||
$table->tinyInteger('nt2a')->nullable();
|
||||
$table->tinyInteger('nt3a')->nullable();
|
||||
$table->decimal('cajnotis3', 5)->nullable();
|
||||
$table->decimal('cajnotis', 5)->nullable();
|
||||
$table->integer('sks1')->nullable();
|
||||
$table->integer('sks2')->nullable();
|
||||
$table->integer('sks3')->nullable();
|
||||
$table->integer('sks4')->nullable();
|
||||
$table->integer('sks5')->nullable();
|
||||
$table->integer('sks6')->nullable();
|
||||
$table->tinyInteger('sks1n')->nullable();
|
||||
$table->tinyInteger('sks2n')->nullable();
|
||||
$table->tinyInteger('sks3n')->nullable();
|
||||
$table->tinyInteger('sks4n')->nullable();
|
||||
$table->tinyInteger('sks5n')->nullable();
|
||||
$table->tinyInteger('sks6n')->nullable();
|
||||
$table->string('pkadarupah', 1)->nullable();
|
||||
$table->integer('hari')->nullable();
|
||||
$table->string('kodgl', 15)->nullable();
|
||||
$table->string('glcode', 15)->nullable();
|
||||
$table->string('glcodebk', 15)->nullable();
|
||||
$table->string('glcode_up', 15)->nullable();
|
||||
$table->string('glcode_kc', 15)->nullable();
|
||||
$table->string('glcode_cn', 15)->nullable();
|
||||
$table->string('glcode_cl', 15)->nullable();
|
||||
$table->string('glcode_hk', 15)->nullable();
|
||||
$table->string('glcode_sc', 15)->nullable();
|
||||
$table->string('glcode_up_jmc', 10)->default('5000/016');
|
||||
$table->string('pilihtempoh', 1)->default('0');
|
||||
$table->integer('harisebulan')->default(0);
|
||||
$table->integer('hari15')->default(0);
|
||||
$table->tinyInteger('jenisansur')->nullable();
|
||||
$table->dateTime('tarikh')->nullable();
|
||||
$table->string('gl_phk', 10)->nullable();
|
||||
$table->string('gl_bp', 10)->nullable();
|
||||
$table->string('gl_belumbp', 10)->nullable();
|
||||
$table->string('glcode_upxtra', 15);
|
||||
$table->string('glcode_clxtra', 15);
|
||||
$table->string('glpd_xtra', 15);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('product');
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateSimulasiLelongTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('simulasi_lelong', function (Blueprint $table) {
|
||||
$table->integer('recNo');
|
||||
$table->smallInteger('BatchNo')->nullable()->default(0);
|
||||
$table->integer('SiriLel')->nullable()->default(0);
|
||||
$table->string('KodCaw', 3)->nullable();
|
||||
$table->string('NoRujukan', 20)->nullable();
|
||||
$table->date('T_Lelong')->nullable();
|
||||
$table->decimal('HargaAsas', 9)->nullable()->default(0);
|
||||
$table->decimal('HargaJual', 9)->nullable()->default(0);
|
||||
$table->date('T_Jual')->nullable();
|
||||
$table->integer('NoPembeli')->nullable()->default(0);
|
||||
$table->decimal('Jbg', 7)->nullable()->default(0);
|
||||
$table->decimal('KadarUpah', 5)->nullable()->default(0);
|
||||
$table->decimal('NilaiMarhun', 9)->nullable()->default(0);
|
||||
$table->decimal('NilaiMarhunS', 9)->default(0);
|
||||
$table->decimal('Pinjaman', 9)->nullable()->default(0);
|
||||
$table->decimal('BakiUpah', 7)->nullable()->default(0);
|
||||
$table->decimal('CajLain', 7)->nullable()->default(0);
|
||||
$table->decimal('CajLelong', 7)->nullable()->default(0);
|
||||
$table->decimal('Baki', 9)->nullable()->default(0);
|
||||
$table->string('Terima', 1)->nullable();
|
||||
$table->tinyInteger('Cetak')->nullable()->default(0);
|
||||
$table->string('Teller', 7)->nullable();
|
||||
$table->string('Pelulus', 7)->nullable();
|
||||
$table->tinyInteger('TagSurat')->nullable()->default(0);
|
||||
$table->date('TrkhTuntut')->nullable();
|
||||
$table->decimal('Berat', 7)->nullable()->default(0);
|
||||
$table->string('Marhun', 30)->nullable();
|
||||
$table->decimal('percent', 9)->default(0);
|
||||
$table->decimal('turun', 11)->default(0);
|
||||
$table->decimal('hargalama', 11)->default(0);
|
||||
$table->string('mutu_terendah', 4);
|
||||
$table->decimal('harga_baru', 11)->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('simulasi_lelong');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit10Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit10', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit10');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit11Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit11', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit11');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit12Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit12', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit12');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit1Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit1', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit1');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit2Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit2', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit2');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit3Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit3', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit3');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit4Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit4', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit4');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit5Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit5', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit5');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit6Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit6', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit6');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit7Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit7', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit7');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit8Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit8', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit8');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateStokaudit9Table extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('stokaudit9', function (Blueprint $table) {
|
||||
$table->integer('id');
|
||||
$table->integer('tahun')->nullable();
|
||||
$table->integer('bulan')->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->decimal('tempoh', 9)->nullable();
|
||||
$table->string('nokp', 199)->nullable();
|
||||
$table->decimal('berat', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->nullable();
|
||||
$table->decimal('kadarupah', 9)->nullable();
|
||||
$table->decimal('tempohblmbyar', 9)->nullable();
|
||||
$table->decimal('upahblmbyar', 9)->nullable();
|
||||
$table->integer('lanjutan')->nullable();
|
||||
$table->decimal('utgonepercent', 9);
|
||||
$table->decimal('ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('stokaudit9');
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateTangguhlelongTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('tangguhlelong', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->smallInteger('batchno')->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->date('tarikhtangguh')->nullable();
|
||||
$table->string('nota', 30)->nullable();
|
||||
$table->decimal('pinjaman', 11)->nullable();
|
||||
$table->decimal('percentpinj', 9)->nullable();
|
||||
$table->integer('jbg')->nullable();
|
||||
$table->decimal('berat', 7)->nullable();
|
||||
$table->integer('fasa')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('tangguhlelong');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateTarafTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('taraf', function (Blueprint $table) {
|
||||
$table->string('taraf', 2)->nullable();
|
||||
$table->string('keterangan', 25)->nullable();
|
||||
$table->decimal('pinjmax', 5)->nullable();
|
||||
$table->decimal('limittunait', 9)->nullable();
|
||||
$table->decimal('limittunaip', 9)->nullable();
|
||||
$table->decimal('maxpinjmohon', 9)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('taraf');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateTebusTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('tebus', function (Blueprint $table) {
|
||||
$table->integer('sirit');
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->string('nopelanggan', 12)->nullable();
|
||||
$table->string('jenisbyr', 2)->nullable();
|
||||
$table->string('jenistebus', 1)->nullable();
|
||||
$table->string('jeniscek', 2)->nullable();
|
||||
$table->string('bankcode', 4)->nullable();
|
||||
$table->string('nocek', 20)->nullable();
|
||||
$table->decimal('cajcek', 5)->nullable()->default(0);
|
||||
$table->string('glcode', 15)->nullable();
|
||||
$table->date('t_jangka')->nullable();
|
||||
$table->date('t_lunas')->nullable();
|
||||
$table->date('t_tendang')->nullable();
|
||||
$table->date('t_tebus')->nullable();
|
||||
$table->decimal('jbg', 7)->nullable();
|
||||
$table->decimal('kadarupah', 5)->nullable();
|
||||
$table->decimal('upahsimpan', 7)->nullable();
|
||||
$table->decimal('ansuran', 9)->nullable();
|
||||
$table->decimal('nilaimarhun', 9)->nullable();
|
||||
$table->decimal('addpinjaman', 7)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakipjm', 9)->default(0);
|
||||
$table->decimal('bakiupah', 7)->nullable();
|
||||
$table->decimal('cajlain', 7)->nullable()->default(0);
|
||||
$table->string('terima', 1)->nullable();
|
||||
$table->integer('cetak')->nullable();
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->string('pelulus', 7)->nullable();
|
||||
$table->string('pelulust', 7)->nullable();
|
||||
$table->string('f_lulus', 1)->nullable();
|
||||
$table->integer('nowakil')->nullable();
|
||||
$table->string('prkod', 2)->nullable();
|
||||
$table->string('cancelid', 7)->nullable();
|
||||
$table->time('canceltime')->nullable();
|
||||
$table->string('kodgl', 15)->nullable();
|
||||
$table->decimal('upahasal', 7)->nullable()->default(0);
|
||||
$table->string('nota', 30)->nullable();
|
||||
$table->decimal('rebate', 7)->nullable();
|
||||
$table->string('marhuntebus', 80)->nullable();
|
||||
$table->tinyInteger('tiada')->nullable()->default(0);
|
||||
$table->decimal('gantirugi', 9)->nullable()->default(0);
|
||||
$table->date('trkhupah')->nullable();
|
||||
$table->integer('tagterima')->nullable()->default(0);
|
||||
$table->string('hubungan', 10)->nullable();
|
||||
$table->decimal('upahpercuma', 11)->nullable();
|
||||
$table->decimal('upahdibayar', 11)->default(0);
|
||||
$table->string('historygadaian', 20)->nullable();
|
||||
$table->decimal('pinjamanterkini', 11)->nullable();
|
||||
$table->decimal('bayaranpampasan', 9)->nullable();
|
||||
$table->decimal('byrnonline', 9)->nullable();
|
||||
$table->decimal('byrnlebih', 9)->nullable();
|
||||
$table->decimal('byrnkurang', 9)->nullable();
|
||||
$table->date('tarikhbyrn')->nullable();
|
||||
$table->decimal('ujrah', 9);
|
||||
$table->decimal('onepercent', 9);
|
||||
$table->decimal('diskaun_rebate', 12)->nullable()->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('tebus');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateTunaiTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('tunai', function (Blueprint $table) {
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('kodlaluan', 100)->nullable();
|
||||
$table->decimal('bakiawal', 11)->default(0);
|
||||
$table->decimal('masuk', 11)->default(0);
|
||||
$table->decimal('yuran', 7)->default(0);
|
||||
$table->decimal('keluar', 11)->default(0);
|
||||
$table->decimal('baki', 11)->default(0);
|
||||
$table->decimal('tambah', 11)->default(0);
|
||||
$table->decimal('kurang', 11)->default(0);
|
||||
$table->integer('recno');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('tunai');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateTuntutbakiTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('tuntutbaki', function (Blueprint $table) {
|
||||
$table->integer('recno');
|
||||
$table->integer('batchno')->nullable()->default(0);
|
||||
$table->string('jenis', 1)->nullable();
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->string('norujukan', 20)->nullable();
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('prkod', 2)->nullable();
|
||||
$table->string('teller', 100)->nullable();
|
||||
$table->string('pelulus', 20)->nullable();
|
||||
$table->decimal('bakipjm', 9)->default(0);
|
||||
$table->decimal('bakiupah', 7)->default(0);
|
||||
$table->decimal('cajlain', 7)->default(0);
|
||||
$table->decimal('cajlelong', 7)->default(0);
|
||||
$table->string('kodgl', 15)->nullable();
|
||||
$table->string('glcode', 15)->nullable();
|
||||
$table->string('terima', 1)->nullable();
|
||||
$table->string('f_lulus', 1)->nullable();
|
||||
$table->decimal('jumlah', 7)->default(0);
|
||||
$table->integer('nowakil')->default(0);
|
||||
$table->decimal('hargajual', 9)->default(0);
|
||||
$table->decimal('gst_cl', 9)->nullable()->default(0);
|
||||
$table->decimal('gst_hj', 9)->nullable()->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('tuntutbaki');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateUgamaTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('ugama', function (Blueprint $table) {
|
||||
$table->string('kodugama', 2)->nullable();
|
||||
$table->string('keterangan', 15)->nullable();
|
||||
$table->integer('recno')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('ugama');
|
||||
}
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateUpdateserverTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('updateserver', function (Blueprint $table) {
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->decimal('gadai', 11)->nullable();
|
||||
$table->decimal('bajetgadai', 11)->default(0);
|
||||
$table->decimal('variansgadai', 11)->default(0);
|
||||
$table->decimal('tebus', 11)->nullable();
|
||||
$table->decimal('bajettebus', 11)->default(0);
|
||||
$table->decimal('varianstebus', 11)->default(0);
|
||||
$table->decimal('upah', 11)->nullable();
|
||||
$table->decimal('upahbajet', 11)->default(0);
|
||||
$table->decimal('variansupah', 11)->default(0);
|
||||
$table->decimal('pinjamangadai', 11)->nullable();
|
||||
$table->integer('customerbaru')->nullable();
|
||||
$table->decimal('bakipetibesi', 11)->nullable();
|
||||
$table->decimal('nilaimarhuntotal', 11)->nullable();
|
||||
$table->decimal('vgadai', 11)->nullable();
|
||||
$table->decimal('vtebus', 11)->nullable();
|
||||
$table->decimal('vupah', 11)->nullable();
|
||||
$table->decimal('vsumgadai', 11)->nullable();
|
||||
$table->decimal('vsumtebus', 11)->nullable();
|
||||
$table->decimal('vsumupah', 11)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('updateserver');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateVaultTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('vault', function (Blueprint $table) {
|
||||
$table->string('kodcaw', 10)->nullable();
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->decimal('bakiawal', 11)->default(0);
|
||||
$table->decimal('keluar', 11)->default(0);
|
||||
$table->decimal('masuk', 11)->default(0);
|
||||
$table->decimal('bakiakhir', 11)->default(0);
|
||||
$table->decimal('bakieod', 11)->default(0);
|
||||
$table->integer('recno');
|
||||
$table->decimal('pendahuluan', 11)->default(0);
|
||||
$table->decimal('serahan', 11)->default(0);
|
||||
$table->integer('1sen')->default(0);
|
||||
$table->integer('5sen')->default(0);
|
||||
$table->integer('10sen')->default(0);
|
||||
$table->integer('20sen')->default(0);
|
||||
$table->integer('50sen')->default(0);
|
||||
$table->integer('rm1')->default(0);
|
||||
$table->integer('rm2')->default(0);
|
||||
$table->integer('rm5')->default(0);
|
||||
$table->integer('rm10')->default(0);
|
||||
$table->integer('rm20')->default(0);
|
||||
$table->integer('rm50')->default(0);
|
||||
$table->integer('rm100')->default(0);
|
||||
$table->integer('rm1000')->default(0);
|
||||
$table->decimal('totpanjar', 11)->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('vault');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateWakilSuratTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('wakil_surat', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('id');
|
||||
$table->string('nosiri')->nullable();
|
||||
$table->string('no_surat')->nullable();
|
||||
$table->string('norujukan')->nullable();
|
||||
$table->string('t_cetak')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('wakil_surat');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateWakilTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('wakil', function (Blueprint $table) {
|
||||
$table->string('nopelanggan', 12)->nullable();
|
||||
$table->integer('nowakil');
|
||||
$table->string('nama', 40)->nullable();
|
||||
$table->string('nokp', 14)->nullable();
|
||||
$table->string('hubungan', 20)->nullable();
|
||||
$table->string('alamat1', 40)->nullable();
|
||||
$table->string('alamat2', 40)->nullable();
|
||||
$table->string('alamat3', 40)->nullable();
|
||||
$table->string('telefon', 20)->nullable();
|
||||
$table->string('nota', 20)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('wakil');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateWtdTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::connection('mysql2')->create('wtd', function (Blueprint $table) {
|
||||
$table->string('norujukan', 20);
|
||||
$table->date('tarikh')->nullable();
|
||||
$table->string('nokp', 20)->nullable();
|
||||
$table->string('nopelanggan', 20)->nullable();
|
||||
$table->string('nama', 50);
|
||||
$table->integer('batchno')->nullable();
|
||||
$table->date('t_jual')->nullable();
|
||||
$table->decimal('hargajual', 9)->nullable();
|
||||
$table->decimal('pinjaman', 9)->nullable();
|
||||
$table->decimal('bakiupah', 9)->nullable();
|
||||
$table->decimal('cajlelong', 9)->nullable();
|
||||
$table->decimal('gst_cl', 9)->nullable();
|
||||
$table->decimal('baki', 9)->nullable();
|
||||
$table->decimal('rugi', 9)->nullable();
|
||||
$table->decimal('ansrugi', 9)->nullable();
|
||||
$table->decimal('wtd', 9)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::connection('mysql2')->dropIfExists('wtd');
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAkruNetPecahanTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('akru_net_pecahan', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('id')->primary();
|
||||
$table->integer('tahun');
|
||||
$table->integer('bulan');
|
||||
$table->decimal('persen_semasa', 9);
|
||||
$table->decimal('ujrah_semasa', 9);
|
||||
$table->decimal('persen_sebelum', 9);
|
||||
$table->decimal('ujrah_sebelum', 9);
|
||||
$table->decimal('keuntungan_semasa_1persen', 9);
|
||||
$table->decimal('keuntungan_semasa_ujrah', 9);
|
||||
$table->decimal('baki_keun_blm_byr_1persen', 9);
|
||||
$table->decimal('baki_keun_blm_byr_ujrah', 9);
|
||||
$table->decimal('pend_akru_1persen', 9);
|
||||
$table->decimal('pend_akru_ujrah', 9);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('akru_net_pecahan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAnggotaTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('anggota', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('id')->primary();
|
||||
$table->string('no_anggota')->nullable()->unique();
|
||||
$table->string('nama');
|
||||
$table->string('noic')->unique();
|
||||
$table->string('no_tel')->nullable();
|
||||
$table->tinyInteger('status')->default(1)->comment('1 = aktif, 0 = tidak aktif');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('anggota');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateArrahnFilesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('arrahn_files', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->unsignedBigInteger('files_id')->nullable()->index();
|
||||
$table->longText('data')->nullable();
|
||||
$table->string('filename')->nullable();
|
||||
$table->string('type', 100)->nullable();
|
||||
$table->string('tarikhmasa', 50)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('arrahn_files');
|
||||
}
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateArrahnMasterDbTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('arrahn_master_db', function (Blueprint $table) {
|
||||
$table->integer('mid')->primary();
|
||||
$table->string('ip_caw', 25);
|
||||
$table->string('id_caw', 50);
|
||||
$table->string('pwd_caw', 25)->default('');
|
||||
$table->string('details_caw', 50);
|
||||
$table->string('db_name', 50);
|
||||
$table->string('kodcaw', 10);
|
||||
$table->string('mysql', 10);
|
||||
$table->integer('zone')->nullable();
|
||||
$table->integer('group_id');
|
||||
$table->char('version', 4)->default('v1');
|
||||
$table->integer('tagarrahnbid')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('arrahn_master_db');
|
||||
}
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAuditCustomerTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('audit_customer', function (Blueprint $table) {
|
||||
$table->integer('aid', true);
|
||||
$table->string('username', 50)->default('');
|
||||
$table->string('old_data', 5000)->default('');
|
||||
$table->string('new_data', 5000)->default('');
|
||||
$table->string('kodcaw', 50)->default('');
|
||||
$table->timestamp('created_at');
|
||||
$table->timestamp('updated_at')->nullable();
|
||||
$table->string('customer_name', 100)->default('');
|
||||
$table->string('customer_nokp', 50)->default('');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('audit_customer');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateAuditTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('audit', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('users', 199)->nullable();
|
||||
$table->string('actions', 199)->nullable();
|
||||
$table->string('norujukan', 199)->nullable();
|
||||
$table->string('old_data', 5000)->nullable();
|
||||
$table->string('new_data', 5000)->nullable();
|
||||
$table->string('kodcaw', 199)->nullable();
|
||||
$table->timestamps();
|
||||
$table->string('details', 5000)->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('audit');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBajetTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('bajet', function (Blueprint $table) {
|
||||
$table->integer('id')->primary();
|
||||
$table->string('kodcaw', 50)->nullable();
|
||||
$table->string('bulan', 50)->nullable();
|
||||
$table->decimal('nilaibajet', 9)->nullable();
|
||||
$table->timestamps();
|
||||
$table->string('updated_by', 50)->nullable();
|
||||
$table->integer('bajetid')->nullable()->index('FK_bajet_bajettahunan');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('bajet');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBajettahunanTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('bajettahunan', function (Blueprint $table) {
|
||||
$table->integer('id')->primary();
|
||||
$table->string('kodcaw', 50)->nullable();
|
||||
$table->date('tahun')->nullable();
|
||||
$table->string('jenisbajet', 50)->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('bajettahunan');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBankTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('bank', function (Blueprint $table) {
|
||||
$table->integer('id')->primary();
|
||||
$table->string('name', 100)->default('0');
|
||||
$table->string('abbreviation', 100)->default('0');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('bank');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateBsasOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('bsas_orders', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('uuid', 64)->nullable()->unique();
|
||||
$table->string('norujukan', 50)->index();
|
||||
$table->string('kodcaw', 20)->index();
|
||||
$table->string('serial_number', 20)->default('1');
|
||||
$table->string('product_code', 50)->nullable();
|
||||
$table->decimal('bid_value', 14)->nullable();
|
||||
$table->decimal('otc_murabaha_value', 14)->nullable();
|
||||
$table->string('otc_counter_party', 150)->nullable();
|
||||
$table->string('status', 30)->default('pending')->index();
|
||||
$table->integer('status_code')->nullable();
|
||||
$table->string('status_message')->nullable();
|
||||
$table->string('e_cert_no', 100)->nullable()->index();
|
||||
$table->json('bid_ecert_response')->nullable();
|
||||
$table->json('otc_ecert_response')->nullable();
|
||||
$table->json('stb_ecert_response')->nullable();
|
||||
$table->json('request_payload')->nullable();
|
||||
$table->json('order_response')->nullable();
|
||||
$table->json('result_response')->nullable();
|
||||
$table->string('created_by', 100)->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->index(['norujukan', 'status']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('bsas_orders');
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user