feat: add migration and seeder databse lpj old to lpj new
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('debitures', function (Blueprint $table) {
|
||||
// nullable
|
||||
$table->string('cif', 16)
|
||||
->nullable()
|
||||
->default('0000000000')
|
||||
->comment('asal data LPJ.PRM_DEBITUR.KODE_CIF. Pada KODE_CIF ada yang digitnya 16 => 3372040405810002')
|
||||
->change();
|
||||
$table->unsignedBigInteger('branch_id')->nullable()->change();
|
||||
$table->string('nomor_id', 50)->nullable()->change();
|
||||
|
||||
$table->unsignedBigInteger('mig_kd_debitur_seq')->nullable()->comment('asal data LPJ.PRM_DEBITUR.KD_DEBITUR_SEQ. Berguna untuk update debitur_id menggunakan KD_DEBITUR_SEQ nya');
|
||||
$table->timestamp('processed_at')->nullable();
|
||||
$table->char('is_mig', 1)->nullable()->comment('untuk menandakan row ini dari LPJ OLD');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('debitures', function (Blueprint $table) {
|
||||
// Kembalikan kolom branch_id agar tidak nullable (asumsi awal NOT NULL)
|
||||
$table->unsignedBigInteger('branch_id')->nullable(false)->change();
|
||||
|
||||
// Kembalikan kolom yang diubah nullable menjadi NOT NULL
|
||||
$table->string('cif', 10)->nullable(false)->change();
|
||||
$table->string('nomor_id', 50)->nullable(false)->change();
|
||||
|
||||
// Hapus kolom tambahan yang dibuat di up()
|
||||
$table->dropColumn([
|
||||
'mig_kd_debitur_seq',
|
||||
'mig_urut_seq_addr',
|
||||
'mig_urut_seq_comm',
|
||||
'processed_at',
|
||||
'is_mig'
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('permohonan', function (Blueprint $table) {
|
||||
// nullable
|
||||
$table->unsignedBigInteger('branch_id')->nullable()->change();
|
||||
$table->unsignedBigInteger('user_id')->nullable()->change();
|
||||
|
||||
|
||||
$table->unsignedBigInteger('mig_kd_debitur_seq')->nullable()->comment('asal data LPJ.PRM_DEBITUR.KD_DEBITUR_SEQ. Berguna untuk update debitur_id menggunakan KD_DEBITUR_SEQ nya');
|
||||
$table->unsignedBigInteger('nomor_lpj')->nullable();
|
||||
$table->timestamp('processed_at')->nullable();
|
||||
$table->char('is_mig', 1)->nullable()->comment('untuk menandakan row ini dari LPJ OLD');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('permohonan', function (Blueprint $table) {
|
||||
// Kembalikan kolom branch_id agar tidak nullable (asumsi awal NOT NULL)
|
||||
$table->unsignedBigInteger('branch_id')->nullable(false)->change();
|
||||
$table->unsignedBigInteger('user_id')->nullable(false)->change();
|
||||
|
||||
|
||||
|
||||
// Hapus kolom tambahan yang dibuat di up()
|
||||
$table->dropColumn([
|
||||
'mig_kd_debitur_seq',
|
||||
'nomor_lpj',
|
||||
'processed_at',
|
||||
'is_mig'
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('dokumen_jaminan', function (Blueprint $table) {
|
||||
// nullable
|
||||
|
||||
$table->unsignedBigInteger('mig_kd_debitur_seq')->nullable()->comment('asal data LPJ.PRM_DEBITUR.KD_DEBITUR_SEQ. Berguna untuk update debitur_id menggunakan KD_DEBITUR_SEQ nya');
|
||||
$table->unsignedBigInteger('nomor_lpj')->nullable();
|
||||
$table->timestamp('processed_at')->nullable();
|
||||
$table->char('is_mig', 1)->nullable()->comment('untuk menandakan row ini dari LPJ OLD');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('dokumen_jaminan', function (Blueprint $table) {
|
||||
|
||||
|
||||
// Hapus kolom tambahan yang dibuat di up()
|
||||
$table->dropColumn([
|
||||
'nomor_lpj',
|
||||
'mig_kd_debitur_seq',
|
||||
'processed_at',
|
||||
'is_mig'
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pemilik_jaminan', function (Blueprint $table) {
|
||||
// nullable
|
||||
|
||||
$table->unsignedBigInteger('mig_kd_debitur_seq')->nullable()->comment('asal data LPJ.PRM_DEBITUR.KD_DEBITUR_SEQ. Berguna untuk update debitur_id menggunakan KD_DEBITUR_SEQ nya');
|
||||
$table->timestamp('processed_at')->nullable();
|
||||
$table->char('is_mig', 1)->nullable()->comment('untuk menandakan row ini dari LPJ OLD');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pemilik_jaminan', function (Blueprint $table) {
|
||||
|
||||
|
||||
// Hapus kolom tambahan yang dibuat di up()
|
||||
$table->dropColumn([
|
||||
'mig_kd_debitur_seq',
|
||||
'processed_at',
|
||||
'is_mig'
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('inspeksi', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('nomor_lpj')->nullable();
|
||||
$table->timestamp('processed_at')->nullable();
|
||||
$table->char('is_mig', 1)->nullable()->comment('untuk menandakan row ini dari LPJ OLD');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('inspeksi', function (Blueprint $table) {
|
||||
$table->dropColumn('nomor_lpj');
|
||||
$table->dropColumn('processed_at');
|
||||
$table->dropColumn('is_mig');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('penilai', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('nomor_lpj')->nullable();
|
||||
$table->timestamp('processed_at')->nullable();
|
||||
$table->char('is_mig', 1)->nullable()->comment('untuk menandakan row ini dari LPJ OLD');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('penilai', function (Blueprint $table) {
|
||||
$table->dropColumn('nomor_lpj');
|
||||
$table->dropColumn('processed_at');
|
||||
$table->dropColumn('is_mig');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -13,24 +13,25 @@ class HubunganPemilikJaminanSeeder extends Seeder
|
||||
public function run(): void
|
||||
{
|
||||
$hubungan_pemilik_jaminan = [
|
||||
[
|
||||
'name' => 'Milik Pribadi'
|
||||
],
|
||||
[
|
||||
'name' => 'Suami/Istri'
|
||||
],
|
||||
[
|
||||
'name' => 'Anak'
|
||||
],
|
||||
[
|
||||
'name' => 'Saudara Kandung'
|
||||
],
|
||||
[
|
||||
'name' => 'Ayah'
|
||||
],
|
||||
[
|
||||
'name' => 'Ibu'
|
||||
]
|
||||
['name' => 'Milik Pribadi'],
|
||||
['name' => 'Suami'],
|
||||
['name' => 'Anak'],
|
||||
['name' => 'Saudara'],
|
||||
['name' => 'Ayah'],
|
||||
['name' => 'Ibu'],
|
||||
['name' => 'Nenek'],
|
||||
['name' => 'Penjual/Developer'],
|
||||
[ 'name' => 'Kakak/adik kandung'],
|
||||
[ 'name' => 'Orang tua'],
|
||||
[ 'name' => 'Mitra Usaha'],
|
||||
[ 'name' => 'Pihak lain'],
|
||||
[ 'name' => 'Negara'],
|
||||
[ 'name' => 'Nenek/kakek'],
|
||||
[ 'name' => 'Milik Keluarga'],
|
||||
[ 'name' => 'Kakak/adik Orangtua'],
|
||||
[ 'name' => 'Istri'],
|
||||
[ 'name' => 'Pengurus'],
|
||||
[ 'name' => 'Lain - lain'],
|
||||
];
|
||||
|
||||
foreach ($hubungan_pemilik_jaminan as $hpj) {
|
||||
|
||||
@@ -69,6 +69,49 @@ class JenisFasilitasKreditSeeder extends Seeder
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'JFK009',
|
||||
'name' => 'UMKM',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'JFK010',
|
||||
'name' => 'KORPORASI',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'JFK011',
|
||||
'name' => 'KPR 2',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'JFK012',
|
||||
'name' => 'KONSUMER',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'JFK013',
|
||||
'name' => 'KOMERSIL',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'JFK014',
|
||||
'name' => 'KPR REGULER',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,36 +12,47 @@ class LpjDatabaseSeeder extends Seeder
|
||||
public function run(): void
|
||||
{
|
||||
$this->call([
|
||||
BranchSeeder::class,
|
||||
CurrencySeeder::class,
|
||||
HolidayCalendarSeeder::class,
|
||||
JenisFasilitasKreditSeeder::class,
|
||||
JenisLegalitasJaminanSeeder::class,
|
||||
JenisJaminanSeeder::class,
|
||||
JenisDokumenSeeder::class,
|
||||
TujuanPenilaianSeeder::class,
|
||||
NilaiPlatformSeeder::class,
|
||||
HubunganPemilikJaminanSeeder::class,
|
||||
HubunganPenghuniJaminanSeeder::class,
|
||||
ArahMataAnginSeeder::class,
|
||||
StatusPermohonanSeeder::class,
|
||||
RegionSeeder::class,
|
||||
TeamsSeeder::class,
|
||||
TeamUsersSeeder::class,
|
||||
JenisPenilaianSeeder::class,
|
||||
IjinUsahaSeeder::class,
|
||||
TujuanPenilaianKJPPSeeder::class,
|
||||
KJPPSeeder::class,
|
||||
JenisLaporanSeeder::class,
|
||||
DebitureSeeder::class,
|
||||
PemilikJaminanSeeder::class,
|
||||
DokumenJaminanSeeder::class,
|
||||
DetailDokumenJaminanSeeder::class,
|
||||
PermohonanSeeder::class,
|
||||
FotoObjekJaminanSeeder::class,
|
||||
|
||||
// BranchSeeder::class,
|
||||
// CurrencySeeder::class,
|
||||
// HolidayCalendarSeeder::class,
|
||||
// JenisFasilitasKreditSeeder::class,
|
||||
// JenisLegalitasJaminanSeeder::class,
|
||||
// JenisJaminanSeeder::class,
|
||||
// JenisDokumenSeeder::class,
|
||||
// TujuanPenilaianSeeder::class,
|
||||
// NilaiPlatformSeeder::class,
|
||||
// HubunganPemilikJaminanSeeder::class,
|
||||
// HubunganPenghuniJaminanSeeder::class,
|
||||
// ArahMataAnginSeeder::class,
|
||||
// StatusPermohonanSeeder::class,
|
||||
// RegionSeeder::class,
|
||||
// TeamsSeeder::class,
|
||||
// TeamUsersSeeder::class,
|
||||
// MasterDataSurveyorSeeder::class
|
||||
// JenisPenilaianSeeder::class,
|
||||
// IjinUsahaSeeder::class,
|
||||
// TujuanPenilaianKJPPSeeder::class,
|
||||
// KJPPSeeder::class,
|
||||
// JenisLaporanSeeder::class,
|
||||
// DebitureSeeder::class,
|
||||
// PemilikJaminanSeeder::class,
|
||||
// DokumenJaminanSeeder::class,
|
||||
// DetailDokumenJaminanSeeder::class,
|
||||
// PermohonanSeeder::class,
|
||||
// FotoObjekJaminanSeeder::class,
|
||||
// PenawaranSeeder::class,
|
||||
// DetailPenawaranSeeder::class,
|
||||
// PenilaianSeeder::class,
|
||||
// MigrationDebitureSeeder::class,
|
||||
// MigrationPermohonanSeeder::class,
|
||||
// MigrationDokumentJaminanSeeder::class,
|
||||
// MigrationDetailDokumenJaminanSeeder::class
|
||||
// MigPenilaianAndPenilainTeamSeeder::class
|
||||
// MigrationInpseksiSeeder::class
|
||||
// MigrationGambarInspeksiSeeder::class
|
||||
MigrationPembandingSeeder::class
|
||||
// MigrationPenilaiSeeder::class
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
21
database/seeders/MasterDataSurveyorSeeder.php
Normal file
21
database/seeders/MasterDataSurveyorSeeder.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class MasterDataSurveyorSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
|
||||
$nameTable =[
|
||||
'faasilitas'
|
||||
]
|
||||
|
||||
DB::unprepared(file_get_contents(__DIR__ . '/sql/teams.sql'));
|
||||
}
|
||||
}
|
||||
307
database/seeders/MigPenilaianAndPenilainTeamSeeder.php
Normal file
307
database/seeders/MigPenilaianAndPenilainTeamSeeder.php
Normal file
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Lpj\Models\Penilaian;
|
||||
use Modules\Usermanagement\Models\User;
|
||||
use Modules\Lpj\Models\PenilaianTeam;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
|
||||
|
||||
class MigPenilaianAndPenilainTeamSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/penilaian/error_migration_penilaian_and_team.csv';
|
||||
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// Bersihkan/Inisialisasi file error log
|
||||
$this->initializeErrorLog();
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/penilaian/mig_penilaian_and_team.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/penilaian/mig_penilaian_and_team.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 500; // Ukuran batch
|
||||
$userDataChace = [];
|
||||
$nomorRegisCahce = [];
|
||||
$errorCount = 0; // Inisialisasi variabel errorCount
|
||||
$errorDebitureIds = []; // Inisialisasi array errorDebitureIds
|
||||
$totalData = 0;
|
||||
|
||||
// Menghitung total data di file CSV
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle); // Reset pointer ke awal file
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
// Jika sudah mencapai batch size, proses batch
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $nomorRegisCahce, $userDataChace, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
// Proses sisa data jika ada
|
||||
// print_r($rows[0]);
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $nomorRegisCahce, $userDataChace, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
$this->command->info("Data debiture berhasil dimigrasikan. Total data: {$totalData}, Total batch: {$batchCount}, Total error: {$errorCount}");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private function processBatch(
|
||||
array $rows,
|
||||
array &$userDataChace,
|
||||
array &$nomorRegisCahce,
|
||||
int &$errorCount,
|
||||
array &$errorDebitureIds,
|
||||
int $totalData,
|
||||
int $batchCount,
|
||||
int $currentRow
|
||||
) {
|
||||
$userData = [];
|
||||
foreach ($rows as $index => $row) {
|
||||
try {
|
||||
// Jalankan setiap baris dengan transaksi sendiri
|
||||
DB::beginTransaction();
|
||||
|
||||
// Cek apakah sudah diproses
|
||||
$existingRecord = Penilaian::where('nomor_registrasi', $row['mig_nomor_registrasi'])->first();
|
||||
if ($existingRecord && $existingRecord->created_at) {
|
||||
$this->command->info('Data sudah diproses sebelumnya: ' . $row['mig_nomor_registrasi']);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil nomor registrasi
|
||||
$nomor_registrasi = $this->getNomorRegistrasiPermohonan($row['mig_nomor_registrasi'], $nomorRegisCahce);
|
||||
if (!$nomor_registrasi) {
|
||||
throw new \Exception("Nomor registrasi tidak valid");
|
||||
}
|
||||
|
||||
// Ambil user ID
|
||||
$userId = $this->getUserId($row['mig_user_id'], $userDataChace);
|
||||
if (!$userId ) {
|
||||
throw new \Exception("User tidak ditemukan");
|
||||
continue;
|
||||
}
|
||||
|
||||
$userIdUpdate = $this->getUserIdData($row['mig_created_by'] ?? null, $userData)['id'];
|
||||
$userIdOtorisasi = $this->getUserIdData($row['mig_authorized_by'] ?? null, $userData)['id'];
|
||||
|
||||
if (!$userIdUpdate || !$userIdOtorisasi) {
|
||||
$this->logError($kode, 'Salah satu user tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Mapping field user
|
||||
$mapUser = [
|
||||
'created_by' => $userIdUpdate,
|
||||
'updated_by' => $userIdUpdate,
|
||||
'authorized_by' => $userIdOtorisasi,
|
||||
];
|
||||
|
||||
// Ambil team ID
|
||||
$teamId = $this->checkTeams($row['mig_team_id']);
|
||||
if (!$teamId) {
|
||||
throw new \Exception("Team tidak ditemukan");
|
||||
}
|
||||
|
||||
// Buat penilaian
|
||||
$penilaian = Penilaian::create([
|
||||
'nomor_registrasi' => $nomor_registrasi,
|
||||
'jenis_penilaian_id' => 1,
|
||||
'tanggal_kunjungan' => $this->parseTimestamp($row['mig_tanggal_kunjungan']) ?? now(),
|
||||
'waktu_penilaian' => $this->parseTimestamp($row['mig_waktu_penilaian']),
|
||||
'status' => 'done',
|
||||
'keterangan' => null,
|
||||
'created_at' => $this->parseTimestamp($row['mig_created_at']),
|
||||
'updated_at' => $this->parseTimestamp($row['mig_updated_at']),
|
||||
'authorized_by' => $mapUser['authorized_by'],
|
||||
'created_by' => $mapUser['created_by'],
|
||||
'updated_by' => $mapUser['updated_by'],
|
||||
]);
|
||||
|
||||
// Buat tim penilaian
|
||||
$roles = ['surveyor', 'penilai'];
|
||||
foreach ($roles as $role) {
|
||||
PenilaianTeam::create([
|
||||
'penilaian_id' => $penilaian->id,
|
||||
'user_id' => $userId,
|
||||
'role' => $role,
|
||||
'team_id' => $teamId,
|
||||
'created_at' => $this->parseTimestamp($row['mig_created_at']),
|
||||
'updated_at' => $this->parseTimestamp($row['mig_updated_at']),
|
||||
]);
|
||||
}
|
||||
|
||||
// Commit transaksi
|
||||
DB::commit();
|
||||
$this->command->info('Proses data penilaian ' . $row['mig_nama_user'] . ' (' . ($index + 1) . '/' . count($rows) . ')');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// Rollback jika ada error
|
||||
DB::rollBack();
|
||||
|
||||
Log::error('Error pada baris: ' . json_encode($row) . '. Pesan: ' . $e->getMessage());
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $row['mig_team_id'] ?? '-';
|
||||
$this->logError($row['mig_team_id'] ?? '-', $e->getMessage());
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$this->command->info("Batch {$batchCount} selesai. Total error: " . count($errorDebitureIds));
|
||||
}
|
||||
|
||||
|
||||
private function getNomorRegistrasiPermohonan($nomor_registrasi_id, $nomorRegisCahce){
|
||||
if (isset($nomorRegisCahce[$nomor_registrasi_id])) {
|
||||
return $nomorRegisCahce[$nomor_registrasi_id];
|
||||
}
|
||||
|
||||
$nomorRegis = Permohonan::where('nomor_registrasi', $nomor_registrasi_id)->first();
|
||||
|
||||
if (!$nomorRegis) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nomorRegisCahce[$nomor_registrasi_id] = $nomorRegis->nomor_registrasi;
|
||||
return $nomorRegis->nomor_registrasi;
|
||||
}
|
||||
private function getUserIdData(?string $code, array &$cache): array
|
||||
{
|
||||
if (!$code) return ['id' => null, 'branch_id' => null];
|
||||
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$user = User::where('nik', $code)->first();
|
||||
|
||||
if ($user) {
|
||||
$cache[$code] = ['id' => $user->id, 'branch_id' => $user->branch_id];
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
return ['id' => null, 'branch_id' => null];
|
||||
}
|
||||
|
||||
private function getUserId($mig_user_id, $userDataChace)
|
||||
{
|
||||
if (isset($userDataChace[$mig_user_id])) {
|
||||
return $userDataChace[$mig_user_id];
|
||||
}
|
||||
|
||||
$userId = User::where('nik', $mig_user_id)->first();
|
||||
|
||||
if (!$userId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$userDataChace[$mig_user_id] = $userId->id;
|
||||
return $userId->id;
|
||||
}
|
||||
|
||||
private function checkTeams($code): int
|
||||
{
|
||||
$mapping = [
|
||||
'01' => 1,
|
||||
'02' => 2,
|
||||
'04' => 4,
|
||||
'07' => 5,
|
||||
'06' => 3,
|
||||
];
|
||||
return $mapping[(string)$code] ?? 1;
|
||||
}
|
||||
|
||||
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
if ($timestamp) {
|
||||
// Cek jika format hanya tanggal (Y-m-d)
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $timestamp)) {
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d', $timestamp)
|
||||
->startOfDay()
|
||||
->toDateTimeString();
|
||||
}
|
||||
// Format lengkap (Y-m-d H:i:s)
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString();
|
||||
}
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp . '. Pesan: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
// Jika file lama ada, hapus
|
||||
if (file_exists($this->errorLogFile)) {
|
||||
unlink($this->errorLogFile);
|
||||
}
|
||||
|
||||
// Buat file baru dengan header
|
||||
$handle = fopen($this->errorLogFile, 'w');
|
||||
fputcsv($handle, ['mig_kd_debitur_seq', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError(string $kode, string $message)
|
||||
{
|
||||
// Catat ke log
|
||||
Log::error("Error migrasi debiture [$kode]: $message");
|
||||
|
||||
// Tulis ke file error
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$kode, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
}
|
||||
246
database/seeders/MigrationDebitureSeeder.php
Normal file
246
database/seeders/MigrationDebitureSeeder.php
Normal file
@@ -0,0 +1,246 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Lpj\Models\Debiture;
|
||||
use Modules\Usermanagement\Models\User;
|
||||
|
||||
|
||||
class MigrationDebitureSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/debitures/error_migration.csv';
|
||||
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// Bersihkan/Inisialisasi file error log
|
||||
$this->initializeErrorLog();
|
||||
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/debitures/mig_debiture.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/debitures/mig_debiture.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 500;
|
||||
$userData = [];
|
||||
$branchCache = [];
|
||||
$totalData = 0;
|
||||
|
||||
// Hitung total baris
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle);
|
||||
fgetcsv($handle, 0, '~'); // Lewati header
|
||||
|
||||
$currentRow = 0;
|
||||
$batchCount = 0;
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
$this->logError($data[0] ?? '-', 'Jumlah kolom tidak sesuai');
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
// print_r($rows);
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
$this->command->info("Data debiture berhasil dimigrasikan. Total data: {$totalData}, Total batch: {$batchCount}");
|
||||
}
|
||||
|
||||
private function processBatch(array $rows, array &$branchCache, array &$userData)
|
||||
{
|
||||
foreach ($rows as $index => $row) {
|
||||
try {
|
||||
$kode = $row['mig_kd_debitur_seq'] ?? '-';
|
||||
|
||||
// Cek apakah sudah diproses sebelumnya
|
||||
$existingRecord = Debiture::where('mig_kd_debitur_seq', $kode)->first();
|
||||
if ($existingRecord && $existingRecord->processed_at) {
|
||||
$this->command->info("Data sudah diproses sebelumnya: $kode");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil branch_id
|
||||
$branchId = $this->getBranchId($row['mig_kd_cabang'] ?? null, $branchCache);
|
||||
if (!$branchId) {
|
||||
$this->logError($kode, 'Cabang tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil user IDs berdasarkan NIK
|
||||
$userIdUpdate = $this->getUserId($row['mig_user_update'] ?? null, $userData)['id'];
|
||||
$userIdOtorisasi = $this->getUserId($row['mig_user_oto'] ?? null, $userData)['id'];
|
||||
|
||||
if (!$userIdUpdate || !$userIdOtorisasi) {
|
||||
$this->logError($kode, 'Salah satu user tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Mapping field user
|
||||
$mapUser = [
|
||||
'created_by' => $userIdUpdate,
|
||||
'updated_by' => $userIdUpdate,
|
||||
'authorized_by' => $userIdOtorisasi,
|
||||
];
|
||||
|
||||
// Parsing nomor HP
|
||||
$nomorHp = !empty($row['mig_phone']) ? preg_replace('/[^0-9]/', '', $row['mig_phone']) : null;
|
||||
$email = !empty($row['email']) ? $row['email'] : null;
|
||||
$nomorId = !empty($row['nomor_id']) ? $row['nomor_id'] : null;
|
||||
|
||||
// Parsing waktu
|
||||
$authorizedAt = $this->parseTimestamp($row['mig_tgl_oto'] ?? null);
|
||||
$createdAt = $this->parseTimestamp($row['created_at'] ?? null);
|
||||
$updatedAt = $this->parseTimestamp($row['updated_at'] ?? null);
|
||||
|
||||
if (!$createdAt || !$updatedAt) {
|
||||
$this->logError($kode, 'Gagal parsing created_at / updated_at');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Simpan data
|
||||
Debiture::create([
|
||||
'branch_id' => $branchId,
|
||||
'name' => $row['name'] ?? '',
|
||||
'cif' => $row['cif'] ?: '0000000000',
|
||||
'phone' => $nomorHp,
|
||||
'nomor_id' => $nomorId,
|
||||
'email' => $email,
|
||||
'npwp' => null,
|
||||
'address' => $row['address'] ?? null,
|
||||
'authorized_at' => $authorizedAt,
|
||||
'authorized_by' => $mapUser['authorized_by'],
|
||||
'created_by' => $mapUser['created_by'],
|
||||
'updated_by' => $mapUser['updated_by'],
|
||||
'created_at' => $createdAt,
|
||||
'updated_at' => $updatedAt,
|
||||
'mig_kd_debitur_seq' => $row['mig_kd_debitur_seq'],
|
||||
'processed_at' => now(),
|
||||
'is_mig' => 1
|
||||
]);
|
||||
|
||||
$this->command->info("Proses data debiture $kode (" . ($index + 1) . '/' . count($rows) . ')');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$this->logError($row['mig_kd_debitur_seq'] ?? '-', "Error eksepsi: " . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function getBranchId(?string $code, array &$cache): ?int
|
||||
{
|
||||
if (!$code) return null;
|
||||
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$branch = Branch::where('code', $code)->first();
|
||||
|
||||
if ($branch) {
|
||||
$cache[$code] = $branch->id;
|
||||
return $branch->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getUserId(?string $code, array &$cache): array
|
||||
{
|
||||
if (!$code) return ['id' => null, 'branch_id' => null];
|
||||
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$user = User::where('nik', $code)->first();
|
||||
|
||||
if ($user) {
|
||||
$cache[$code] = ['id' => $user->id, 'branch_id' => $user->branch_id];
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
return ['id' => null, 'branch_id' => null];
|
||||
}
|
||||
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
if ($timestamp) {
|
||||
// Cek jika format hanya tanggal (Y-m-d)
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $timestamp)) {
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d', $timestamp)
|
||||
->startOfDay()
|
||||
->toDateTimeString();
|
||||
}
|
||||
// Format lengkap (Y-m-d H:i:s)
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString();
|
||||
}
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp . '. Pesan: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
// Jika file lama ada, hapus
|
||||
if (file_exists($this->errorLogFile)) {
|
||||
unlink($this->errorLogFile);
|
||||
}
|
||||
|
||||
// Buat file baru dengan header
|
||||
$handle = fopen($this->errorLogFile, 'w');
|
||||
fputcsv($handle, ['mig_kd_debitur_seq', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError(string $kode, string $message)
|
||||
{
|
||||
// Catat ke log
|
||||
Log::error("Error migrasi debiture [$kode]: $message");
|
||||
|
||||
// Tulis ke file error
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$kode, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
259
database/seeders/MigrationDetailDokumenJaminanSeeder.php
Normal file
259
database/seeders/MigrationDetailDokumenJaminanSeeder.php
Normal file
@@ -0,0 +1,259 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\Lpj\Models\Debiture;
|
||||
use Modules\Location\Models\City;
|
||||
use Modules\Location\Models\District;
|
||||
use Modules\Location\Models\Province;
|
||||
use Modules\Location\Models\Village;
|
||||
use Modules\Lpj\Models\DokumenJaminan;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
use Modules\Lpj\Models\JenisJaminan;
|
||||
use Modules\Lpj\Models\JenisLegalitasJaminan;
|
||||
use Modules\Lpj\Models\PemilikJaminan;
|
||||
use Modules\Lpj\Models\DetailDokumenJaminan;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class MigrationDetailDokumenJaminanSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/mig_pemilik_dan_dokument_error.csv';
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
|
||||
public function run()
|
||||
{
|
||||
$this->initializeErrorLog();
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/detail-dokumen/mig_detail_dokumen.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/detail-dokumen/mig_detail_dokumen.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 1000; // Ukuran batch
|
||||
$permohonanCache = [];
|
||||
$jenisJaminanCache = [];
|
||||
$dokumenJaminanCache = [];
|
||||
$provinceCache = [];
|
||||
$cityCache = [];
|
||||
$districtCache = [];
|
||||
$subdistrictCache = [];
|
||||
$totalData = 0;
|
||||
$errorCount = 0;
|
||||
$errorDebitureIds = [];
|
||||
$hubunganPemilikCache = [];
|
||||
|
||||
// Menghitung total data di file CSV
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle); // Reset pointer ke awal file
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
|
||||
|
||||
// Membaca setiap baris dalam CSV
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $data[0] ?? 'ID tidak valid'; // Menyimpan ID yang error
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
// print_r($rows);
|
||||
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$errorDebitureIds[] = $data[0] ?? 'ID tidak valid'; // Menyimpan ID yang error
|
||||
$this->processBatch($rows, $permohonanCache, $jenisJaminanCache, $dokumenJaminanCache, $batchCount, $currentRow, $totalData, $errorCount, $errorDebitureIds);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
// print_r($rows[0]);
|
||||
if (!empty($rows)) {
|
||||
$this->processBatch($rows, $permohonanCache, $jenisJaminanCache, $dokumenJaminanCache, $batchCount, $currentRow, $totalData, $errorCount, $errorDebitureIds);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
$this->command->info('Data debiture berhasil dimigrasikan.');
|
||||
}
|
||||
|
||||
private function processBatch(
|
||||
array $rows,
|
||||
array &$permohonanCache,
|
||||
array &$jenisJaminanCache,
|
||||
array &$dokumenJaminanCache,
|
||||
int $batchCount,
|
||||
int $currentRow,
|
||||
int $totalData,
|
||||
int &$errorCount,
|
||||
array &$errorDebitureIds
|
||||
) {
|
||||
foreach ($rows as $index => $row) {
|
||||
try {
|
||||
// Pastikan field penting tersedia
|
||||
if (!isset($row['mig_grp_keterangan'], $row['mig_key_keterangan'], $row['mig_nilai'])) {
|
||||
throw new \Exception('Field wajib tidak ditemukan');
|
||||
}
|
||||
|
||||
$debiturId = $row['mig_kd_debitur_seq'] ?? null;
|
||||
$jaminanGroup = $row['mig_grp_keterangan'];
|
||||
$keyName = $row['mig_key_keterangan'];
|
||||
$value = $row['mig_nilai'];
|
||||
$urlFile = $row['mig_url_file'] ?? null;
|
||||
|
||||
// Inisialisasi struktur jika belum ada
|
||||
if (!isset($this->result[$jaminanGroup])) {
|
||||
$this->result[$jaminanGroup] = [
|
||||
'group' => $jaminanGroup,
|
||||
'details' => [],
|
||||
'documents' => []
|
||||
];
|
||||
}
|
||||
|
||||
// Gabungkan detail
|
||||
$detailItem = [$keyName => $value];
|
||||
if (!empty($this->result[$jaminanGroup]['details'])) {
|
||||
$existingDetails = $this->result[$jaminanGroup]['details'][0];
|
||||
$detailItem = array_merge($existingDetails, $detailItem);
|
||||
}
|
||||
$this->result[$jaminanGroup]['details'] = [$detailItem];
|
||||
|
||||
// Tambahkan dokumen jika ada
|
||||
if ($urlFile && !in_array($urlFile, $this->result[$jaminanGroup]['documents'])) {
|
||||
$this->result[$jaminanGroup]['documents'][] = $urlFile;
|
||||
}
|
||||
|
||||
// Jika sudah akhir group atau baris terakhir, simpan ke DB
|
||||
if ($index === count($rows) - 1 || $row['mig_grp_keterangan'] !== $rows[$index + 1]['mig_grp_keterangan']) {
|
||||
|
||||
// Ambil ID dokumen jaminan
|
||||
$dokumenJaminanId = $this->getDokumenJaminanId($debiturId, $dokumenJaminanCache);
|
||||
if (!$dokumenJaminanId) {
|
||||
throw new \Exception('Dokumen jaminan tidak ditemukan');
|
||||
}
|
||||
|
||||
// Ambil ID legalitas jaminan
|
||||
$legalitasJaminanId = $this->getLegalitasJaminanId($jaminanGroup, $jenisJaminanCache);
|
||||
if (!$legalitasJaminanId) {
|
||||
throw new \Exception('Legalitas jaminan tidak ditemukan');
|
||||
}
|
||||
|
||||
// Encode hasil sementara
|
||||
$jsonResult = json_encode($this->result[$jaminanGroup], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
$dataJsonDecode = json_decode($jsonResult);
|
||||
|
||||
// Simpan ke database
|
||||
DetailDokumenJaminan::create([
|
||||
'name' => $jaminanGroup,
|
||||
'dokumen_jaminan_id' => $dokumenJaminanId,
|
||||
'details' => isset($dataJsonDecode->details) ? json_encode($dataJsonDecode->details) : null,
|
||||
'jenis_legalitas_jaminan_id' => $legalitasJaminanId,
|
||||
'dokumen_jaminan' => !empty($dataJsonDecode->documents) ? json_encode($dataJsonDecode->documents) : null,
|
||||
'dokumen_nomor' => $row['dokumen_nomor'] ?? null,
|
||||
'keterangan' => $row['mig_deskripsi_file'] ?? null,
|
||||
]);
|
||||
|
||||
// Hapus dari result set agar tidak duplikat
|
||||
unset($this->result[$jaminanGroup]);
|
||||
|
||||
// Info progress
|
||||
$this->command->info('Proses data detail dokumen (' . ($index + 1) . '/' . count($rows)
|
||||
. ', batch ke: ' . $batchCount
|
||||
. ', total dari: ' . $currentRow . '/' . $totalData . ')');
|
||||
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Error pada baris: ' . json_encode($row) . '. Pesan: ' . $e->getMessage());
|
||||
|
||||
// Catat error ke file CSV
|
||||
$this->logError($debiturId ?? '-', $e->getMessage());
|
||||
$errorDebitureIds[] = $debiturId ?? '-';
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset result set setelah batch selesai
|
||||
$this->result = [];
|
||||
}
|
||||
|
||||
|
||||
private function getDokumenJaminanId(string $code, array &$dokumenJaminanCache)
|
||||
{
|
||||
if (isset($dokumenJaminanCache[$code])) {
|
||||
return $dokumenJaminanCache[$code];
|
||||
}
|
||||
|
||||
$dokumen = DokumenJaminan::where('mig_kd_debitur_seq', $code)->first();
|
||||
|
||||
if ($dokumen) {
|
||||
$dokumenJaminanCache[$code] = $dokumen->id;
|
||||
return $dokumen->id;
|
||||
}
|
||||
}
|
||||
|
||||
private function getLegalitasJaminanId(string $code, array &$legalitasJaminanCache)
|
||||
{
|
||||
|
||||
if (isset($legalitasJaminanCache[$code])) {
|
||||
return $legalitasJaminanCache[$code];
|
||||
}
|
||||
|
||||
$legalitas = JenisLegalitasJaminan::whereRaw('LOWER(name) = ?', [strtolower($code)])->first();
|
||||
|
||||
if ($legalitas) {
|
||||
$legalitasJaminanCache[$code] = $legalitas->id;
|
||||
return $legalitas->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
if (file_exists($file)) {
|
||||
unlink($file); // Hapus file lama
|
||||
}
|
||||
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_kd_debitur_seq', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError(string $kode, string $message)
|
||||
{
|
||||
Log::error("Error migrasi dokumen jaminan [$kode]: $message");
|
||||
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$kode, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
}
|
||||
427
database/seeders/MigrationDokumentJaminanSeeder.php
Normal file
427
database/seeders/MigrationDokumentJaminanSeeder.php
Normal file
@@ -0,0 +1,427 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\Lpj\Models\Debiture;
|
||||
use Modules\Location\Models\City;
|
||||
use Modules\Location\Models\District;
|
||||
use Modules\Location\Models\Province;
|
||||
use Modules\Location\Models\Village;
|
||||
use Modules\Lpj\Models\DokumenJaminan;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
use Modules\Lpj\Models\JenisJaminan;
|
||||
use Modules\Lpj\Models\PemilikJaminan;
|
||||
use Modules\Lpj\Models\HubunganPemilikJaminan;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
|
||||
class MigrationDokumentJaminanSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/dokumen-dan-pemilik/mig_pemilik_dan_dokument_error.csv';
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->initializeErrorLog();
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/dokumen-dan-pemilik/mig_pemilik_dan_dokument.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/mig_pemilik_dan_dokument.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 1000; // Ukuran batch
|
||||
$permohonanCache = [];
|
||||
$jenisJaminanCache = [];
|
||||
$pemilikJaminanCache = [];
|
||||
$provinceCache = [];
|
||||
$cityCache = [];
|
||||
$districtCache = [];
|
||||
$subdistrictCache = [];
|
||||
$totalData = 0;
|
||||
$errorCount = 0;
|
||||
$errorDebitureIds = [];
|
||||
$hubunganPemilikCache = [];
|
||||
// Menghitung total data di file CSV
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle); // Reset pointer ke awal file
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
|
||||
|
||||
// Membaca setiap baris dalam CSV
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $data[0] ?? 'ID tidak valid'; // Menyimpan ID yang error
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
// print_r($rows);
|
||||
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$errorDebitureIds[] = $data[0] ?? 'ID tidak valid'; // Menyimpan ID yang error
|
||||
$this->processBatch($rows, $permohonanCache, $jenisJaminanCache, $pemilikJaminanCache, $provinceCache, $cityCache, $districtCache, $subdistrictCache, $batchCount, $currentRow, $totalData, $errorCount, $errorDebitureIds, $hubunganPemilikCache);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
// print_r($rows[0]);
|
||||
if (!empty($rows)) {
|
||||
$this->processBatch($rows, $permohonanCache, $jenisJaminanCache, $pemilikJaminanCache, $provinceCache, $cityCache, $districtCache, $subdistrictCache, $batchCount, $currentRow, $totalData, $errorCount, $errorDebitureIds, $hubunganPemilikCache);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
$this->command->info('Data debiture berhasil dimigrasikan.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Proses batch data.
|
||||
*/
|
||||
|
||||
private function processBatch(
|
||||
array $rows,
|
||||
array &$permohonanCache,
|
||||
array &$jenisJaminanCache,
|
||||
array &$pemilikJaminanCache,
|
||||
array &$provinceCache,
|
||||
array &$cityCache,
|
||||
array &$districtCache,
|
||||
array &$subdistrictCache,
|
||||
int $batchCount,
|
||||
int $currentRow,
|
||||
int $totalData,
|
||||
int &$errorCount,
|
||||
array &$errorDebitureIds,
|
||||
array &$hubunganPemilikCache
|
||||
) {
|
||||
foreach ($rows as $index => $row) {
|
||||
try {
|
||||
// Jalankan transaksi per-baris
|
||||
DB::beginTransaction();
|
||||
|
||||
// Cari permohonan
|
||||
$permohonan = $this->getPermohonanId(
|
||||
$row['mig_kd_debitur_seq'],
|
||||
$row['mig_nomor_jaminan'],
|
||||
$permohonanCache
|
||||
);
|
||||
|
||||
if (empty($permohonan['debiture_id'])) {
|
||||
throw new \Exception('Missing debiture_id');
|
||||
}
|
||||
|
||||
// Pastikan permohonan_id belum digunakan di dokumen_jaminan
|
||||
$existingDokumen = DokumenJaminan::where('permohonan_id', $permohonan['id'])->first();
|
||||
if ($existingDokumen) {
|
||||
throw new \Exception("permohonan_id {$permohonan['id']} sudah digunakan di dokumen_jaminan");
|
||||
}
|
||||
|
||||
// Ambil lokasi
|
||||
$proviceCode = $this->getProvinceCode($row['mig_province_name'], $provinceCache);
|
||||
$cityCode = $this->getCityCode($row['mig_city_name'], $cityCache);
|
||||
$districtCode = $this->getDistrictCode($row['mig_district_name'], $districtCache);
|
||||
$subdistrict = $this->getSubdistrictCode($row['mig_village_name'], $subdistrictCache, $districtCache);
|
||||
$hubunganPemilik = $this->getHubunganPemilikJaminanId($row['mig_hubungan_pemilik_jaminan'], $hubunganPemilikCache);
|
||||
|
||||
// Buat Pemilik Jaminan
|
||||
$pemilik_jaminan = PemilikJaminan::create([
|
||||
'debiture_id' => $permohonan['debiture_id'],
|
||||
'hubungan_pemilik_jaminan_id' => $hubunganPemilik,
|
||||
'name' => $row['name'],
|
||||
'detail_sertifikat' => null,
|
||||
'npwp' => null,
|
||||
'nomor_id' => null,
|
||||
'email' => null,
|
||||
'phone' => null,
|
||||
'province_code' => $proviceCode,
|
||||
'city_code' => $cityCode,
|
||||
'district_code' => $districtCode,
|
||||
'village_code' => $subdistrict['code'],
|
||||
'postal_code' => $subdistrict['postal_code'],
|
||||
'address' => $row['address'],
|
||||
'created_at' => $this->parseTimestamp($row['created_at']),
|
||||
'updated_at' => $this->parseTimestamp($row['updated_at']),
|
||||
'mig_kd_debitur_seq' => $row['mig_kd_debitur_seq'],
|
||||
'processed_at' => now(),
|
||||
'is_mig' => 1
|
||||
]);
|
||||
|
||||
// Buat Dokumen Jaminan
|
||||
DokumenJaminan::create([
|
||||
'debiture_id' => $permohonan['debiture_id'],
|
||||
'permohonan_id' => $permohonan['id'],
|
||||
'jenis_jaminan_id' => 17,
|
||||
'pemilik_jaminan_id' => $pemilik_jaminan->id,
|
||||
'province_code' => $proviceCode,
|
||||
'city_code' => $cityCode,
|
||||
'district_code' => $districtCode,
|
||||
'village_code' => $subdistrict['code'],
|
||||
'postal_code' => $subdistrict['postal_code'],
|
||||
'address' => $row['address'],
|
||||
'created_at' => $this->parseTimestamp($row['created_at']),
|
||||
'updated_at' => $this->parseTimestamp($row['updated_at']),
|
||||
'mig_kd_debitur_seq' => $row['mig_kd_debitur_seq'],
|
||||
'processed_at' => now(),
|
||||
'is_mig' => 1
|
||||
]);
|
||||
|
||||
// Commit jika semua sukses
|
||||
DB::commit();
|
||||
$this->command->info("Proses dokumen jaminan: " . $row['mig_kd_debitur_seq'] . "Batch: {$batchCount} Baris: {$currentRow} Total: {$totalData} Error: {$errorCount}");
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// Rollback hanya untuk baris ini
|
||||
DB::rollBack();
|
||||
|
||||
Log::error("Error pada baris: " . json_encode($row) . ". Pesan: " . $e->getMessage());
|
||||
$this->logError($row['mig_kd_debitur_seq'] ?? '-', $e->getMessage());
|
||||
$errorDebitureIds[] = $row['mig_kd_debitur_seq'] ?? '-';
|
||||
}
|
||||
}
|
||||
|
||||
$this->command->info("Batch {$batchCount} selesai. Total error: " . count($errorDebitureIds));
|
||||
}
|
||||
private function getPermohonanId(string $code, string $mig_nomor_jaminan, array &$cache): ?array
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$permohonan = Permohonan::where('mig_kd_debitur_seq', $code)->where('nomor_registrasi', $mig_nomor_jaminan)->first();
|
||||
|
||||
if ($permohonan) {
|
||||
$cache[$code] = [
|
||||
'id' => $permohonan->id,
|
||||
'debiture_id' => $permohonan->debiture_id,
|
||||
'mig_kd_debitur_seq' => $permohonan->mig_kd_debitur_seq
|
||||
];
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => null,
|
||||
'debiture_id' => null,
|
||||
'mig_kd_debitur_seq' => null
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
private function getJaminanId(string $code, array &$cache): ?int
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$jaminan = JenisJaminan::whereRaw('LOWER(name) = ?', [strtolower($code)])->first();
|
||||
|
||||
if ($jaminan) {
|
||||
$cache[$code] = $jaminan->id;
|
||||
return $jaminan->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getPemilikJaminanId(string $code, array &$cache): ?int
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$jaminan = PemilikJaminan::where('mig_kd_debitur_seq', $code)->first();
|
||||
|
||||
if ($jaminan) {
|
||||
$cache[$code] = $jaminan->id;
|
||||
return $jaminan->id;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
private function getDebitureId(string $code, array &$cache): ?int
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$debiture = Debiture::where('mig_kd_debitur_seq', $code)->first();
|
||||
|
||||
if ($debiture) {
|
||||
$cache[$code] = $debiture->id;
|
||||
return $debiture->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private function getProvinceCode(string $name, array &$cache): ?string
|
||||
{
|
||||
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$province = Province::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($province) {
|
||||
$cache[$normalizedName] = $province->code;
|
||||
return $province->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getCityCode(string $name, array &$cache): ?string
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$city = City::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($city) {
|
||||
$cache[$normalizedName] = $city->code;
|
||||
return $city->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getDistrictCode(string $name, array &$cache): ?string
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$district = District::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($district) {
|
||||
$cache[$normalizedName] = $district->code;
|
||||
return $district->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getSubdistrictCode(string $name, array &$cache, array &$districtCache): ?array
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
|
||||
// Pastikan cache menyimpan array, bukan hanya kode
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Ambil subdistrict dari database
|
||||
$subdistrict = Village::whereRaw('LOWER(name) = ?', [$normalizedName])->first();
|
||||
|
||||
// Jika ditemukan, simpan ke dalam cache sebagai array lengkap
|
||||
if ($subdistrict) {
|
||||
$cache[$normalizedName] = [
|
||||
'code' => $subdistrict->code,
|
||||
'postal_code' => $subdistrict->postal_code
|
||||
];
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Jika tidak ditemukan, kembalikan null
|
||||
return [
|
||||
'code' => null,
|
||||
'postal_code' => null
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
private function getHubunganPemilikJaminanId(string $code, array &$cache): ?int
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$jaminan = HubunganPemilikJaminan::whereRaw('LOWER(name) = ?', [strtolower($code)])->first();
|
||||
|
||||
if ($jaminan) {
|
||||
$cache[$code] = $jaminan->id;
|
||||
return $jaminan->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mengonversi nilai TIMESTAMP menjadi format datetime yang valid.
|
||||
*/
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
if ($timestamp) {
|
||||
// Cek jika format hanya tanggal (Y-m-d)
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $timestamp)) {
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d', $timestamp)
|
||||
->startOfDay()
|
||||
->toDateTimeString();
|
||||
}
|
||||
// Format lengkap (Y-m-d H:i:s)
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString();
|
||||
}
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp . '. Pesan: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
if (file_exists($file)) {
|
||||
unlink($file); // Hapus file lama
|
||||
}
|
||||
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_kd_debitur_seq', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError(string $kode, string $message)
|
||||
{
|
||||
Log::error("Error migrasi dokumen jaminan [$kode]: $message");
|
||||
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$kode, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
230
database/seeders/MigrationGambarInspeksiSeeder.php
Normal file
230
database/seeders/MigrationGambarInspeksiSeeder.php
Normal file
@@ -0,0 +1,230 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Lpj\Models\Inspeksi;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Lpj\Models\DokumenJaminan;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
|
||||
class MigrationGambarInspeksiSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
protected $errorLogFile = __DIR__ . '/csv/inspeksi/mig_inspeksi_foto_error.csv';
|
||||
public function run()
|
||||
{
|
||||
$this->initializeErrorLog();
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/inspeksi/mig_inspeksi_foto.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/inspeksi/mig_inspeksi_foto.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 500;
|
||||
$userData = [];
|
||||
$branchCache = []; // <-- Gunakan sebagai cache
|
||||
$totalData = 0;
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle);
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
$errorCount = 0;
|
||||
$errorDebitureIds = [];
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
// info_harga_laporan_202505021522.csv
|
||||
// print_r($rows[0]);
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
$this->command->info("Data debiture berhasil dimigrasikan. Total data: {$totalData}, Total batch: {$batchCount}");
|
||||
}
|
||||
|
||||
private function processBatch(array $rows, array &$branchCache, array &$userData, int &$errorCount, array &$errorDebitureIds, int $totalData, int $batchCount, int $currentRow)
|
||||
{
|
||||
// Kelompokkan berdasarkan mig_nomor_jaminan
|
||||
$groupedRows = $this->groupRowsByJaminan($rows);
|
||||
|
||||
foreach ($groupedRows as $nomorJaminan => $groupRows) {
|
||||
try {
|
||||
// Ambil informasi permohonan dan dokument_id
|
||||
$nomorRegis = $this->getNomorRegistrasiPermohonan($nomorJaminan, $branchCache);
|
||||
if (!$nomorRegis) {
|
||||
Log::warning("Nomor registrasi tidak ditemukan untuk nomor jaminan: {$nomorJaminan}");
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorJaminan;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Bangun JSON foto_form
|
||||
$fotoJson = $this->checkFoto($groupRows);
|
||||
|
||||
Inspeksi::where('permohonan_id', $nomorRegis['id'])
|
||||
->where('dokument_id', $nomorRegis['dokument_id'])
|
||||
->whereNotNull('data_form')
|
||||
->update([
|
||||
'foto_form' => $fotoJson,
|
||||
'updated_at' => now()
|
||||
]);
|
||||
|
||||
$this->command->info("Berhasil update foto_form untuk nomor jaminan: {$nomorJaminan}");
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error("Error pada nomor jaminan {$nomorJaminan}: " . $e->getMessage());
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorJaminan;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
private function groupRowsByJaminan(array $rows): array {
|
||||
$grouped = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$nomorJaminan = $row['mig_nomor_jaminan'] ?? null;
|
||||
|
||||
if (!empty($nomorJaminan)) {
|
||||
$grouped[$nomorJaminan][] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
|
||||
private function checkFoto(array $rows)
|
||||
{
|
||||
$fotos = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
// Pastikan kolom ada
|
||||
$namaFoto = trim($row['mig_nama_gambar'] ?? '');
|
||||
$pathFoto = trim($row['mig_url_gambar'] ?? '');
|
||||
$kategori = trim($row['mig_kategori'] ?? 'lainnya');
|
||||
$urutan = (int)($row['mig_urutan_gambar'] ?? 999); // Default urutan besar jika tidak ada
|
||||
|
||||
if (empty($pathFoto)) {
|
||||
continue; // skip jika path kosong
|
||||
}
|
||||
|
||||
$fotos[] = [
|
||||
'urutan' => $urutan,
|
||||
'name' => $namaFoto,
|
||||
'path' => $pathFoto,
|
||||
'category' => $kategori,
|
||||
'sub' => null,
|
||||
'description' => '',
|
||||
'created_by' => null,
|
||||
'created_at' => null
|
||||
];
|
||||
}
|
||||
|
||||
// Urutkan array berdasarkan mig_urutan_gambar
|
||||
usort($fotos, function ($a, $b) {
|
||||
return $a['urutan'] <=> $b['urutan'];
|
||||
});
|
||||
|
||||
// Hapus indeks 'urutan' setelah diurutkan
|
||||
$finalFotos = array_map(function ($foto) {
|
||||
unset($foto['urutan']);
|
||||
return $foto;
|
||||
}, $fotos);
|
||||
|
||||
return json_encode([
|
||||
'foto_jaminan' => $finalFotos
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
}
|
||||
private function getNomorRegistrasiPermohonan($nomor_jaminan_id, array &$cache)
|
||||
{
|
||||
// Cek apakah sudah ada di cache
|
||||
if (isset($cache[$nomor_jaminan_id])) {
|
||||
return $cache[$nomor_jaminan_id];
|
||||
}
|
||||
|
||||
// Cari di tabel Permohonan berdasarkan nomor registrasi
|
||||
$permohonan = Permohonan::where('nomor_registrasi', $nomor_jaminan_id)->first();
|
||||
|
||||
if (!$permohonan) {
|
||||
// Tidak ditemukan
|
||||
$cache[$nomor_jaminan_id] = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Cari dokument jaminan terkait
|
||||
$dokumenJaminan = DokumenJaminan::where('permohonan_id', $permohonan->id)->first();
|
||||
|
||||
// Simpan hasil ke cache
|
||||
$result = [
|
||||
'id' => $permohonan->id,
|
||||
'dokument_id' => $dokumenJaminan ? $dokumenJaminan->id : null
|
||||
];
|
||||
|
||||
$cache[$nomor_jaminan_id] = $result;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
if (file_exists($file)) {
|
||||
unlink($file); // Hapus file lama
|
||||
}
|
||||
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_kd_debitur_seq', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError(string $kode, string $message)
|
||||
{
|
||||
Log::error("Error migrasi dokumen jaminan [$kode]: $message");
|
||||
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$kode, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
850
database/seeders/MigrationInpseksiSeeder.php
Normal file
850
database/seeders/MigrationInpseksiSeeder.php
Normal file
@@ -0,0 +1,850 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Lpj\Models\Inspeksi;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Lpj\Models\DokumenJaminan;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
use Modules\Location\Models\City;
|
||||
use Modules\Location\Models\District;
|
||||
use Modules\Location\Models\Province;
|
||||
use Modules\Location\Models\Village;
|
||||
|
||||
class MigrationInpseksiSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/inspeksi/mig_inspeksi_error_2025.csv';
|
||||
// protected $fielKesimpulan = ;
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->initializeErrorLog();
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/inspeksi/mig_inspeksi_2025.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/inspeksi/mig_inspeksi_2022.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 500;
|
||||
$userData = [];
|
||||
$branchCache = []; // <-- Gunakan sebagai cache
|
||||
$totalData = 0;
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle);
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
$errorCount = 0;
|
||||
$errorDebitureIds = [];
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
$this->command->info("Data debiture berhasil dimigrasikan. Total data: {$totalData}, Total batch: {$batchCount}");
|
||||
}
|
||||
|
||||
|
||||
private function processBatch(
|
||||
array $rows,
|
||||
array &$branchCache,
|
||||
array &$debitureCache,
|
||||
int &$errorCount,
|
||||
array &$errorDebitureIds,
|
||||
int $totalData,
|
||||
int $batchCount,
|
||||
int $currentRow
|
||||
) {
|
||||
// Kelompokkan baris berdasarkan mig_nomor_jaminan
|
||||
$groupedData = $this->groupRowsByJaminan($rows);
|
||||
|
||||
foreach ($groupedData as $nomorJaminan => $groupRows) {
|
||||
// try {
|
||||
// Cek apakah sudah ada di inspeksi
|
||||
|
||||
|
||||
// Ambil informasi permohonan
|
||||
$nomorRegis = $this->getNomorRegistrasiPermohonan($nomorJaminan, $branchCache);
|
||||
if (!$nomorRegis) {
|
||||
Log::warning("Nomor registrasi tidak ditemukan untuk nomor jaminan: {$nomorJaminan}");
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorJaminan;
|
||||
continue;
|
||||
}
|
||||
|
||||
$existingRecord = Inspeksi::where('permohonan_id', $nomorRegis['id'])
|
||||
->where('dokument_id', $nomorRegis['dokument_id'])
|
||||
->whereNotNull('data_form')
|
||||
->first();
|
||||
|
||||
if ($existingRecord) {
|
||||
$this->command->info("Data untuk nomor jaminan {$nomorJaminan} sudah ada. Lewati...");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil created_at / updated_at dari baris pertama
|
||||
$firstRow = reset($groupRows);
|
||||
|
||||
// Bangun JSON lengkap
|
||||
$dataFormJson = $this->buildFullDataForm($groupRows);
|
||||
|
||||
// Simpan ke database hanya sekali per grup
|
||||
Inspeksi::create([
|
||||
'name' => 'tanah,bangunan,lingkungan,fakta,informasi',
|
||||
'data_form' => $dataFormJson,
|
||||
'foto_form' => null,
|
||||
'data_pembanding' => null,
|
||||
'permohonan_id' => $nomorRegis['id'] ?? null,
|
||||
'dokument_id' => $nomorRegis['dokument_id'] ?? null,
|
||||
'created_at' => $this->parseTimestamp($firstRow['created_at']),
|
||||
'updated_at' => $this->parseTimestamp($firstRow['updated_at']),
|
||||
'nomor_lpj' => $nomorJaminan,
|
||||
'processed_at' => now(),
|
||||
'is_mig' => 1
|
||||
]);
|
||||
|
||||
$this->command->info("Berhasil simpan data inspeksi untuk nomor jaminan: {$nomorJaminan}");
|
||||
|
||||
// } catch (\Exception $e) {
|
||||
// Log::error("Error pada nomor jaminan {$nomorJaminan}: " . $e->getMessage());
|
||||
// $errorCount++;
|
||||
// $errorDebitureIds[] = $nomorJaminan;
|
||||
// continue;
|
||||
// }
|
||||
}
|
||||
}
|
||||
private function groupRowsByJaminan(array $rows): array
|
||||
{
|
||||
$grouped = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$nomorJaminan = $row['mig_nomor_jaminan'] ?? null;
|
||||
|
||||
if (!empty($nomorJaminan)) {
|
||||
$grouped[$nomorJaminan][] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
private function getNomorRegistrasiPermohonan($nomor_jaminan_id, array &$cache)
|
||||
{
|
||||
// Cek apakah sudah ada di cache
|
||||
if (isset($cache[$nomor_jaminan_id])) {
|
||||
return $cache[$nomor_jaminan_id];
|
||||
}
|
||||
|
||||
// Cari di tabel Permohonan berdasarkan nomor registrasi
|
||||
$permohonan = Permohonan::where('nomor_registrasi', $nomor_jaminan_id)->first();
|
||||
|
||||
if (!$permohonan) {
|
||||
// Tidak ditemukan
|
||||
$cache[$nomor_jaminan_id] = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Cari dokument jaminan terkait
|
||||
$dokumenJaminan = DokumenJaminan::where('permohonan_id', $permohonan->id)->first();
|
||||
|
||||
// Simpan hasil ke cache
|
||||
$result = [
|
||||
'id' => $permohonan->id,
|
||||
'dokument_id' => $dokumenJaminan ? $dokumenJaminan->id : null
|
||||
];
|
||||
|
||||
$cache[$nomor_jaminan_id] = $result;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
private function buildFullDataForm(array $rows)
|
||||
{
|
||||
|
||||
$assetJson = json_decode($this->checkAsset($rows)[0] ?? '', true);
|
||||
$tanahJson = json_decode($this->checkTanah($rows)[0] ?? '', true);
|
||||
$bangunanJson = json_decode($this->checkBangunan($rows)[0] ?? '', true);
|
||||
$lingkunganJson = json_decode($this->checkLingkungan($rows)[0] ?? '', true);
|
||||
|
||||
|
||||
$nomorLpj = $rows[0]['mig_nomor_lpj'] ?? null;
|
||||
|
||||
$kesimpulanRows = $this->loadKesimpulanByNomorLpj($nomorLpj);
|
||||
|
||||
$faktaJson = [];
|
||||
if (!empty($kesimpulanRows)) {
|
||||
$faktaResult = $this->checkKesimpulan($kesimpulanRows);
|
||||
$faktaJson = json_decode($faktaResult[0] ?? '', true)['fakta'] ?? [];
|
||||
}
|
||||
|
||||
return json_encode([
|
||||
'asset' => $assetJson['asset'] ?? [],
|
||||
'tanah' => $tanahJson['tanah'] ?? [],
|
||||
'bangunan' => $bangunanJson['bangunan'] ?? [],
|
||||
'lingkungan' => $lingkunganJson['lingkungan'] ?? [],
|
||||
'fakta' => $faktaJson
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
}
|
||||
|
||||
|
||||
private function loadKesimpulanByNomorLpj($nomorLpj)
|
||||
{
|
||||
$filePath = realpath(__DIR__ . '/csv/inspeksi/mig_inspeksi_kesimpulan_2025.csv');
|
||||
|
||||
if (!$filePath || !$nomorLpj) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error("Gagal membuka file CSV kesimpulan: " . $filePath);
|
||||
return [];
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$result = [];
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$row = array_combine($header, $data);
|
||||
|
||||
if ($row['mig_nomor_lpj'] === $nomorLpj) {
|
||||
$result[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
// print_r($result);
|
||||
|
||||
fclose($handle);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function checkTanah($rows)
|
||||
{
|
||||
$dataToInsertJson = [];
|
||||
$tanah = [
|
||||
'luas_tanah' => ['sesuai' => null],
|
||||
'hadap_mata_angin' => ['sesuai' => null],
|
||||
'bentuk_tanah' => ['bentuk_tanah' => [], 'lainnya' => null],
|
||||
'kontur_tanah' => [],
|
||||
'ketinggian_tanah' => ['ketinggian' => [], 'lebih_tinggi' => null, 'lebih_rendah' => null],
|
||||
'kontur_jalan' => null,
|
||||
'ketinggian_jalan' => [],
|
||||
'posisi_kavling' => ['posisi_kavling' => [], 'lainnya' => null],
|
||||
'tusuk_sate' => 'no',
|
||||
'lockland' => 'no',
|
||||
'kondisi_fisik_tanah' => ['kondisi_fisik_tanah' => [], 'lainnya' => null]
|
||||
];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$name = trim($row['name']);
|
||||
$keySesuaiORTidak = !empty($row['mig_name_keterangan_lain']) ? 'sesuai' : 'tidak sesuai';
|
||||
$value = !empty($row['mig_name_keterangan_lain']) ? $row['mig_name_keterangan_lain'] : $row['mig_name_keterangan'];
|
||||
|
||||
switch ($name) {
|
||||
case 'Luas Tanah':
|
||||
$tanah['luas_tanah'][$keySesuaiORTidak] = $value;
|
||||
break;
|
||||
|
||||
case 'Permukaan dengan Jalan':
|
||||
$tanah['hadap_mata_angin'][$keySesuaiORTidak] = $value;
|
||||
break;
|
||||
|
||||
case 'Bentuk Tanah':
|
||||
if ($value === 'Lainnya') {
|
||||
$tanah['bentuk_tanah']['bentuk_tanah'][] = $value;
|
||||
$tanah['bentuk_tanah']['lainnya'] = $row['mig_name_keterangan_lain'];
|
||||
} else {
|
||||
$tanah['bentuk_tanah']['bentuk_tanah'][] = $value;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Kontur Tanah':
|
||||
$tanah['kontur_tanah'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Peruntukan Tanah':
|
||||
$tanah['ketinggian_tanah']['ketinggian'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Fisik Tanah':
|
||||
$tanah['kondisi_fisik_tanah']['kondisi_fisik_tanah'][] = $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Isi default jika kosong
|
||||
if (empty($tanah['luas_tanah']['sesuai'])) {
|
||||
$tanah['luas_tanah'] = ['sesuai' => null];
|
||||
}
|
||||
if (empty($tanah['hadap_mata_angin']['sesuai'])) {
|
||||
$tanah['hadap_mata_angin'] = ['sesuai' => null];
|
||||
}
|
||||
|
||||
// Masukkan ke array JSON
|
||||
$dataToInsertJson[] = json_encode([
|
||||
'tanah' => $tanah
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
return $dataToInsertJson;
|
||||
}
|
||||
|
||||
private function checkBangunan($rows)
|
||||
{
|
||||
$dataToInsertJson = [];
|
||||
|
||||
// Inisialisasi struktur bangunan
|
||||
$bangunan = [
|
||||
'luas_tanah_bagunan' => ['sesuai' => null],
|
||||
'jenis_bangunan' => [],
|
||||
'kondisi_bangunan' => [],
|
||||
'sifat_bangunan' => [],
|
||||
'sifat_bangunan_input' => [null, null, null],
|
||||
'spesifikasi_bangunan' => [
|
||||
[
|
||||
'bagunan' => 'Bangunan 1',
|
||||
'spek_kategori_bangunan' => [
|
||||
'Pondasi' => ['0' => null, '1' => null, 'lainnya' => null],
|
||||
'Struktur' => ['0' => null, '1' => null, 'lainnya' => null],
|
||||
'Rangka Atap' => ['0' => null, 'lainnya' => null],
|
||||
'Tutup Atap' => ['0' => null, 'lainnya' => null],
|
||||
'Plafond' => ['lainnya' => null],
|
||||
'Dinding' => ['0' => null, '1' => null, 'lainnya' => null],
|
||||
'Pelapis Dinding' => ['0' => null, 'lainnya' => null],
|
||||
'Pintu Jendela' => ['0' => null, '1' => null, '2' => null, '3' => null, 'lainnya' => null],
|
||||
'Lantai' => ['0' => null, '1' => null, 'lainnya' => null],
|
||||
]
|
||||
]
|
||||
],
|
||||
'sarana_pelengkap' => [],
|
||||
'sarana_pelengkap_input' => [null, null, null, null, null, null, null, null, null]
|
||||
];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$name = trim($row['name']);
|
||||
$keySesuaiORTidak = !empty($row['mig_name_keterangan_lain']) ? 'sesuai' : 'tidak sesuai';
|
||||
$value = !empty($row['mig_name_keterangan_lain']) ? $row['mig_name_keterangan_lain'] : $row['mig_name_keterangan'];
|
||||
|
||||
switch ($name) {
|
||||
case 'Luas Bangunan':
|
||||
$bangunan['luas_tanah_bagunan'][$keySesuaiORTidak] = $value;
|
||||
break;
|
||||
|
||||
case 'Jenis Bangunan':
|
||||
if ($value === 'Lainnya') {
|
||||
$bangunan['jenis_bangunan'][] = $value;
|
||||
} else {
|
||||
$bangunan['jenis_bangunan'][] = $value;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Kondisi Bangunan':
|
||||
$bangunan['kondisi_bangunan'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Sifat Bangunan':
|
||||
$bangunan['sifat_bangunan'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Lantai':
|
||||
$bangunan['spesifikasi_bangunan'][0]['spek_kategori_bangunan']['Lantai']['0'] = $value;
|
||||
break;
|
||||
|
||||
case 'Dinding':
|
||||
$bangunan['spesifikasi_bangunan'][0]['spek_kategori_bangunan']['Dinding']['0'] = $value;
|
||||
break;
|
||||
|
||||
case 'Langit-langit / Plafon':
|
||||
$bangunan['spesifikasi_bangunan'][0]['spek_kategori_bangunan']['Plafond']['lainnya'] = $value;
|
||||
break;
|
||||
|
||||
case 'Kusen-kusen':
|
||||
$bangunan['spesifikasi_bangunan'][0]['spek_kategori_bangunan']['Pintu Jendela']['0'] = $value;
|
||||
break;
|
||||
|
||||
case 'Penutup Atap':
|
||||
$bangunan['spesifikasi_bangunan'][0]['spek_kategori_bangunan']['Tutup Atap']['0'] = $value;
|
||||
break;
|
||||
|
||||
case 'Partisi':
|
||||
$bangunan['spesifikasi_bangunan'][0]['spek_kategori_bangunan']['Dinding']['1'] = $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Isi default jika kosong
|
||||
if (empty($bangunan['luas_tanah_bagunan']['sesuai'])) {
|
||||
$bangunan['luas_tanah_bagunan'] = ['sesuai' => null];
|
||||
}
|
||||
|
||||
// Masukkan ke array JSON
|
||||
$dataToInsertJson[] = json_encode([
|
||||
'bangunan' => $bangunan
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
return $dataToInsertJson;
|
||||
}
|
||||
|
||||
|
||||
private function checkLingkungan($rows)
|
||||
{
|
||||
$dataToInsertJson = [];
|
||||
|
||||
// Inisialisasi struktur lingkungan
|
||||
$lingkungan = [
|
||||
'jarak_jalan_utama' => null,
|
||||
'jalan_linkungan' => null,
|
||||
'jarak_cbd_point' => null,
|
||||
'nama_cbd_point' => null,
|
||||
'lebar_perkerasan_jalan' => null,
|
||||
'perkerasan_jalan' => ['perkerasan_jalan' => [], 'lainnya' => null],
|
||||
'lalu_lintas' => null,
|
||||
'gol_mas_sekitar' => [],
|
||||
'tingkat_keramaian' => [],
|
||||
'terletak_diarea' => ['terletak_diarea' => [], 'lainnya' => null],
|
||||
'disekitar_lokasi' => null,
|
||||
'kondisi_bagunan_disekitar_lokasi' => null,
|
||||
'sifat_bagunan_disekitar_lokasi' => null,
|
||||
'dekat_makam' => 'tidak',
|
||||
'jarak_makam' => null,
|
||||
'nama_makam' => null,
|
||||
'dekat_tps' => 'tidak',
|
||||
'jarak_tps' => null,
|
||||
'nama_tps' => null,
|
||||
'dekat_lainnya' => null,
|
||||
'merupakan_daerah' => [],
|
||||
'fasilitas_dekat_object' => [],
|
||||
'fasilitas_dekat_object_input' => [
|
||||
'Tempat Ibadah' => null,
|
||||
'Rumah Sakit' => null,
|
||||
'Sekolah' => null,
|
||||
'Kantor Pemerintahan' => null,
|
||||
'Stasiun Kereta' => null,
|
||||
'Terminal Bus' => null,
|
||||
'Bandara' => null,
|
||||
'Pos Polisi' => null,
|
||||
'Lainnya' => null
|
||||
]
|
||||
];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$name = trim($row['name']);
|
||||
$value = !empty($row['mig_name_keterangan_lain']) ? $row['mig_name_keterangan_lain'] : $row['mig_name_keterangan'];
|
||||
|
||||
switch ($name) {
|
||||
case 'Lebar jalan dimuka lokasi':
|
||||
$lingkungan['lebar_perkerasan_jalan'] = $row['mig_name_keterangan_lain'];
|
||||
break;
|
||||
|
||||
case 'Lapisan perkerasan jalan dari':
|
||||
if ($value === 'Lainnya') {
|
||||
$lingkungan['perkerasan_jalan']['perkerasan_jalan'][] = $value;
|
||||
$lingkungan['perkerasan_jalan']['lainnya'] = $row['mig_name_keterangan_lain'];
|
||||
} else {
|
||||
$lingkungan['perkerasan_jalan']['perkerasan_jalan'][] = $value;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Lalulintas didepan lokasi':
|
||||
$lingkungan['lalu_lintas'] = $value;
|
||||
break;
|
||||
|
||||
case 'Golongan Masyarakat sekitar':
|
||||
$lingkungan['gol_mas_sekitar'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Dengan kondisi':
|
||||
$lingkungan['tingkat_keramaian'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Terletak didaerah':
|
||||
if ($value === 'Lainnya') {
|
||||
$lingkungan['terletak_diarea']['terletak_diarea'][] = $value;
|
||||
$lingkungan['terletak_diarea']['lainnya'] = $row['mig_name_keterangan_lain'];
|
||||
} else {
|
||||
$lingkungan['terletak_diarea']['terletak_diarea'][] = $value;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Disekitar lokasi':
|
||||
$lingkungan['disekitar_lokasi'] = $value === 'Telah ada bangunan' ? 'sesuai' : 'tidak sesuai';
|
||||
break;
|
||||
|
||||
case 'Merupakan daerah':
|
||||
$lingkungan['merupakan_daerah'][] = $value;
|
||||
break;
|
||||
|
||||
case 'Fasilitas umum dekat lokasi':
|
||||
$lingkungan['fasilitas_dekat_object'][] = $value;
|
||||
if (isset($lingkungan['fasilitas_dekat_object_input'][$value])) {
|
||||
$lingkungan['fasilitas_dekat_object_input'][$value] = $value;
|
||||
} elseif ($value === 'Pasar / Swalayan') {
|
||||
$lingkungan['fasilitas_dekat_object_input']['Lainnya'] = 'pasar';
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Isi default jika kosong
|
||||
if (empty($lingkungan['fasilitas_dekat_object'])) {
|
||||
$lingkungan['fasilitas_dekat_object'] = [];
|
||||
}
|
||||
|
||||
// Masukkan ke array JSON
|
||||
$dataToInsertJson[] = json_encode([
|
||||
'lingkungan' => $lingkungan
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
return $dataToInsertJson;
|
||||
}
|
||||
|
||||
private function checkAsset(array $rows)
|
||||
{
|
||||
$dataToInsertJson = [];
|
||||
|
||||
// Ambil baris pertama saja
|
||||
$firstRow = reset($rows);
|
||||
|
||||
if (!$firstRow) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Inisialisasi variabel dari baris pertama
|
||||
$hubCadeb = null;
|
||||
$hubPenghuni = null;
|
||||
$jenisAsset = null;
|
||||
|
||||
// Ambil data utama dari baris pertama
|
||||
$pihakBank = $firstRow['mig_pihak_bank'] ?? null;
|
||||
$debiturPerwakilan = $firstRow['mig_debiture_perwakilan'] ?? null;
|
||||
$address = $firstRow['address'] ?? null;
|
||||
|
||||
// Kode wilayah
|
||||
$provinceCache = []; // cache untuk helper
|
||||
$cityCache = [];
|
||||
$districtCache = [];
|
||||
$subdistrictCache = [];
|
||||
|
||||
$proviceCode = $this->getProvinceCode($firstRow['mig_village_name'] ?? '', $provinceCache);
|
||||
$cityCode = $this->getCityCode($firstRow['mig_city_name'] ?? '', $cityCache);
|
||||
$districtCode = $this->getDistrictCode($firstRow['mig_district_name'] ?? '', $districtCache);
|
||||
$subdistrict = $this->getSubdistrictCode($firstRow['mig_province_name'] ?? '', $subdistrictCache, $districtCache);
|
||||
|
||||
// Proses hubungan pemilik/penghuni & jenis asset dari seluruh rows
|
||||
foreach ($rows as $row) {
|
||||
$name = trim($row['name'] ?? '');
|
||||
$keySesuaiORTidak = !empty($row['mig_name_keterangan_lain']) ? 'sesuai' : 'tidak sesuai';
|
||||
$value = !empty($row['mig_name_keterangan_lain'])
|
||||
? $row['mig_name_keterangan_lain']
|
||||
: $row['mig_name_keterangan'] ?? null;
|
||||
|
||||
switch ($name) {
|
||||
case 'Hubungan Pemilik Jaminan dengan Debitur':
|
||||
$hubCadeb = [
|
||||
$keySesuaiORTidak => $value
|
||||
];
|
||||
break;
|
||||
|
||||
case 'Hubungan Penghuni Jaminan dengan Debitur':
|
||||
$hubPenghuni = [
|
||||
$keySesuaiORTidak => $value
|
||||
];
|
||||
break;
|
||||
|
||||
case 'Jenis Bangunan':
|
||||
$jenisAsset = [
|
||||
$keySesuaiORTidak => $value
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Isi default jika kosong
|
||||
if (empty($hubCadeb)) $hubCadeb = ["tidak sesuai" => null];
|
||||
if (empty($hubPenghuni)) $hubPenghuni = ["tidak sesuai" => null];
|
||||
if (empty($jenisAsset)) $jenisAsset = ["sesuai" => null];
|
||||
|
||||
// Bangun struktur JSON
|
||||
$asset = [
|
||||
"debitur_perwakilan" => $debiturPerwakilan,
|
||||
"jenis_asset" => $jenisAsset,
|
||||
"alamat" => [
|
||||
"sesuai" => [
|
||||
"address" => $address,
|
||||
"village_code" => $subdistrict['code'],
|
||||
"district_code" => $districtCode,
|
||||
"city_code" => $cityCode,
|
||||
"province_code" => $proviceCode
|
||||
]
|
||||
],
|
||||
"hub_cadeb" => $hubCadeb,
|
||||
"hub_cadeb_penghuni" => $hubPenghuni,
|
||||
"pihak_bank" => $pihakBank,
|
||||
"kordinat_lng" => null,
|
||||
"kordinat_lat" => null
|
||||
];
|
||||
|
||||
// Masukkan ke array JSON
|
||||
$dataToInsertJson[] = json_encode([
|
||||
"asset" => $asset
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
return $dataToInsertJson;
|
||||
}
|
||||
|
||||
|
||||
private function checkKesimpulan($rows)
|
||||
{
|
||||
$dataToInsertJson = [];
|
||||
|
||||
$fakta = [
|
||||
'fakta_positif' => [],
|
||||
'fakta_negatif' => [],
|
||||
'rute_menuju' => null,
|
||||
'batas_batas' => ["Utara", "Timur", "Selatan", "Barat"],
|
||||
'batas_batas_input' => [
|
||||
"Utara" => null,
|
||||
"Timur Laut" => null,
|
||||
"Timur" => null,
|
||||
"Tenggara" => null,
|
||||
"Selatan" => null,
|
||||
"Barat Daya" => null,
|
||||
"Barat" => null,
|
||||
"Barat Laut" => null,
|
||||
"Utara Timur Laut" => null,
|
||||
"Timur Timur Laut" => null,
|
||||
"Timur Tenggara" => null,
|
||||
"Selatan Tenggara" => null,
|
||||
"Selatan Barat Daya" => null,
|
||||
"Barat Barat Daya" => null,
|
||||
"Barat Barat Laut" => null,
|
||||
"Utara Barat Laut" => null
|
||||
],
|
||||
'kondisi_lingkungan' => [],
|
||||
'kondisi_lain_bangunan' => [],
|
||||
'informasi_dokument' => [],
|
||||
'peruntukan' => null,
|
||||
'kdb' => null,
|
||||
'kdh' => null,
|
||||
'gsb' => null,
|
||||
'max_lantai' => null,
|
||||
'klb' => null,
|
||||
'gss' => null,
|
||||
'pelebaran_jalan' => null,
|
||||
'nama_petugas' => null,
|
||||
'keterangan' => []
|
||||
];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$jenis = trim($row['mig_keterangan']); // misal: Fakta Positif, Fakta Negatif, dll
|
||||
$keterangan = trim($row['mig_kesimpulan']);
|
||||
|
||||
switch ($jenis) {
|
||||
case 'Faktor Positif':
|
||||
$fakta['fakta_positif'][] = $keterangan;
|
||||
break;
|
||||
|
||||
case 'Faktor Negatif':
|
||||
$fakta['fakta_negatif'][] = $keterangan;
|
||||
break;
|
||||
|
||||
case 'Rute Menuju':
|
||||
$fakta['rute_menuju'] = $keterangan;
|
||||
break;
|
||||
|
||||
case 'Kondisi Lingkungan':
|
||||
$fakta['kondisi_lingkungan'][] = $keterangan;
|
||||
break;
|
||||
|
||||
case 'Kondisi Bangunan':
|
||||
$fakta['kondisi_lain_bangunan'][] = $keterangan;
|
||||
break;
|
||||
|
||||
case 'Informasi Dokumen':
|
||||
$fakta['informasi_dokument'][] = $keterangan;
|
||||
break;
|
||||
|
||||
case 'Lain - lain':
|
||||
$fakta['keterangan'][] = $keterangan;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$dataToInsertJson[] = json_encode([
|
||||
'fakta' => $fakta
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
return $dataToInsertJson;
|
||||
}
|
||||
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
if ($timestamp) {
|
||||
// Cek jika format hanya tanggal (Y-m-d)
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $timestamp)) {
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d', $timestamp)
|
||||
->startOfDay()
|
||||
->toDateTimeString();
|
||||
}
|
||||
// Format lengkap (Y-m-d H:i:s)
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString();
|
||||
}
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp . '. Pesan: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function getProvinceCode(string $name, array &$cache): ?string
|
||||
{
|
||||
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$province = Province::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($province) {
|
||||
$cache[$normalizedName] = $province->code;
|
||||
return $province->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getCityCode(string $name, array &$cache): ?string
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$city = City::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($city) {
|
||||
$cache[$normalizedName] = $city->code;
|
||||
return $city->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getDistrictCode(string $name, array &$cache): ?string
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$district = District::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($district) {
|
||||
$cache[$normalizedName] = $district->code;
|
||||
return $district->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getSubdistrictCode(string $name, array &$cache, array &$districtCache): ?array
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
|
||||
// Pastikan cache menyimpan array, bukan hanya kode
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Ambil subdistrict dari database
|
||||
$subdistrict = Village::whereRaw('LOWER(name) = ?', [$normalizedName])->first();
|
||||
|
||||
// Jika ditemukan, simpan ke dalam cache sebagai array lengkap
|
||||
if ($subdistrict) {
|
||||
$cache[$normalizedName] = [
|
||||
'code' => $subdistrict->code,
|
||||
'postal_code' => $subdistrict->postal_code
|
||||
];
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Jika tidak ditemukan, kembalikan null
|
||||
return [
|
||||
'code' => null,
|
||||
'postal_code' => null
|
||||
];
|
||||
}
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
// Hapus file lama jika ada
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
|
||||
// Buat file baru dengan header
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_mst_jaminan_nomor_jaminan', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError( $nomorJaminan, string $message)
|
||||
{
|
||||
Log::error("Error migrasi permohonan [$nomorJaminan]: $message");
|
||||
|
||||
// Tulis ke file error
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$nomorJaminan, $message]);
|
||||
|
||||
}
|
||||
}
|
||||
16
database/seeders/MigrationLaporanSeeder.php
Normal file
16
database/seeders/MigrationLaporanSeeder.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class MigrationLaporanSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// $this->call([]);
|
||||
}
|
||||
}
|
||||
222
database/seeders/MigrationPembandingSeeder.php
Normal file
222
database/seeders/MigrationPembandingSeeder.php
Normal file
@@ -0,0 +1,222 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Lpj\Models\Inspeksi;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Lpj\Models\DokumenJaminan;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
|
||||
class MigrationPembandingSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/inspeksi/mig_penilai_pembanding_error_2.csv';
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/inspeksi/mig_penilai_pembanding_2.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/inspeksi/mig_penilai_pembanding_2.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 500;
|
||||
$userData = [];
|
||||
$branchCache = []; // <-- Gunakan sebagai cache
|
||||
$totalData = 0;
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle);
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
$errorCount = 0;
|
||||
$errorDebitureIds = [];
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
// info_harga_laporan_202505021522.csv
|
||||
// print_r($rows[0]);
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
$this->command->info("Data debiture berhasil dimigrasikan. Total data: {$totalData}, Total batch: {$batchCount}");
|
||||
}
|
||||
|
||||
private function processBatch(array $rows, array &$branchCache, array &$userData, int &$errorCount, array &$errorDebitureIds, int $totalData, int $batchCount, int $currentRow)
|
||||
{
|
||||
// Kelompokkan berdasarkan mig_nomor_lpj
|
||||
$groupedRows = $this->groupRowsByJaminan($rows);
|
||||
|
||||
foreach ($groupedRows as $nomorLpj => $groupRows) {
|
||||
try {
|
||||
// Dapatkan info permohonan untuk update inspeksi
|
||||
$nomorRegis = $this->getNomorRegistrasiPermohonan($nomorLpj, $branchCache);
|
||||
if (!$nomorRegis) {
|
||||
Log::warning("Nomor registrasi tidak ditemukan untuk nomor LPJ: {$nomorLpj}");
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorLpj;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Bangun JSON data pembanding
|
||||
$pembandingJson = $this->checkPembanding($groupRows);
|
||||
|
||||
// Update ke tabel inspeksi
|
||||
|
||||
// print_r($pembandingJson);
|
||||
Inspeksi::where('permohonan_id', $nomorRegis['id'])
|
||||
->where('dokument_id', $nomorRegis['dokument_id'])
|
||||
->update([
|
||||
'data_pembanding' => $pembandingJson,
|
||||
'updated_at' => now()
|
||||
]);
|
||||
|
||||
$this->command->info("Berhasil update data_pembanding untuk nomor LPJ: {$nomorLpj}");
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error("Error pada nomor LPJ {$nomorLpj}: " . $e->getMessage());
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorLpj;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
private function groupRowsByJaminan(array $rows): array {
|
||||
$grouped = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$nomorJaminan = $row['mig_nomor_lpj'] ?? null;
|
||||
|
||||
if (!empty($nomorJaminan)) {
|
||||
$grouped[$nomorJaminan][] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
private function checkPembanding(array $rows)
|
||||
{
|
||||
$pembandingList = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
// Pastikan kolom penting tersedia
|
||||
$urutan = (int)($row['mig_urutan'] ?? 999);
|
||||
$sumber = trim($row['mig_keterangan'] ?? '');
|
||||
$linkGambar = trim($row['mig_path'] ?? '');
|
||||
|
||||
if (empty($sumber) || empty($linkGambar)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
$pembandingList[] = [
|
||||
'urutan' => $urutan,
|
||||
'sumber' => $sumber,
|
||||
'foto_objek' => $linkGambar
|
||||
];
|
||||
}
|
||||
|
||||
// Urutkan berdasarkan urutan
|
||||
usort($pembandingList, function ($a, $b) {
|
||||
return $a['urutan'] <=> $b['urutan'];
|
||||
});
|
||||
|
||||
// Hapus indeks 'urutan'
|
||||
$finalPembanding = array_map(function ($item) {
|
||||
unset($item['urutan']);
|
||||
return $item;
|
||||
}, $pembandingList);
|
||||
|
||||
return json_encode([
|
||||
'data_pembanding' => $finalPembanding
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
}
|
||||
private function getNomorRegistrasiPermohonan($nomor_jaminan_id, array &$cache)
|
||||
{
|
||||
if (isset($cache[$nomor_jaminan_id])) {
|
||||
return $cache[$nomor_jaminan_id];
|
||||
}
|
||||
|
||||
$permohonan = Permohonan::where('nomor_lpj', $nomor_jaminan_id)->first();
|
||||
|
||||
if (!$permohonan) {
|
||||
$cache[$nomor_jaminan_id] = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
$dokumenJaminan = DokumenJaminan::where('permohonan_id', $permohonan->id)->first();
|
||||
|
||||
$result = [
|
||||
'id' => $permohonan->id,
|
||||
'dokument_id' => $dokumenJaminan ? $dokumenJaminan->id : null
|
||||
];
|
||||
|
||||
$cache[$nomor_jaminan_id] = $result;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
// Hapus file lama jika ada
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
|
||||
// Buat file baru dengan header
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_mst_jaminan_nomor_jaminan', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError( $nomorJaminan, string $message)
|
||||
{
|
||||
Log::error("Error migrasi permohonan [$nomorJaminan]: $message");
|
||||
|
||||
// Tulis ke file error
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$nomorJaminan, $message]);
|
||||
|
||||
}
|
||||
}
|
||||
264
database/seeders/MigrationPemilikJaminanSeeder.php
Normal file
264
database/seeders/MigrationPemilikJaminanSeeder.php
Normal file
@@ -0,0 +1,264 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\Lpj\Models\HubunganPemilikJaminan;
|
||||
use Modules\Lpj\Models\Debiture;
|
||||
use Modules\Lpj\Models\PemilikJaminan;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Usermanagement\Models\User;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Location\Models\Province;
|
||||
use Modules\Location\Models\City;
|
||||
use Modules\Location\Models\District;
|
||||
use Modules\Location\Models\Village;
|
||||
|
||||
class MigrationPemilikJaminanSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$filePath = realpath(__DIR__ . '/csv/mig_dokument_dan_pemilik.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File CSV tidak ditemukan: ' . __DIR__ . '/csv/pemilik.csv');
|
||||
$this->command->error('File CSV tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 100; // Ukuran batch
|
||||
$branchCache = [];
|
||||
$debitureCache = [];
|
||||
$hubunganPemilikCache = [];
|
||||
$provinceCache = [];
|
||||
$cityCache = [];
|
||||
$districtCache = [];
|
||||
$subdistrictCache = [];
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$this->processBatch($rows, $branchCache, $debitureCache, $hubunganPemilikCache, $provinceCache, $cityCache, $districtCache, $subdistrictCache);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
// print_r($rows);
|
||||
if (!empty($rows)) {
|
||||
$this->processBatch($rows, $branchCache, $debitureCache, $hubunganPemilikCache, $provinceCache, $cityCache, $districtCache, $subdistrictCache);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
$this->command->info('Data permohonan berhasil dimigrasikan.');
|
||||
}
|
||||
|
||||
private function processBatch(array $rows, array &$branchCache, array &$debitureCache, array &$hubunganPemilikCache, array &$provinceCache, array &$cityCache, array &$districtCache, array &$subdistrictCache)
|
||||
{
|
||||
foreach ($rows as $index => $row) {
|
||||
$debitureId = $this->getDebiturId($row['mig_kd_debitur_seq'], $debitureCache);
|
||||
|
||||
if (!$debitureId) {
|
||||
Log::warning('Debitur tidak ditemukan untuk kode: ' . $row['mig_kd_debitur_seq']);
|
||||
continue;
|
||||
}
|
||||
|
||||
$hubunganPemilik = $this->getHubunganPemilikId($row['mig_hubungan_pemilik_jaminan'], $hubunganPemilikCache);
|
||||
|
||||
|
||||
$proviceCode = $this->getProvinceCode($row['mig_province_name'], $provinceCache);
|
||||
$cityCode = $this->getCityCode($row['mig_city_name'], $cityCache);
|
||||
$districtCode = $this->getDistrictCode($row['mig_district_name'], $districtCache);
|
||||
|
||||
$subdistrictCode = $this->getSubdistrictCode($row['mig_village_name'], $subdistrictCache, $districtCache);
|
||||
|
||||
|
||||
PemilikJaminan::create([
|
||||
'debiture_id' => $debitureId,
|
||||
'hubungan_pemilik_jaminan_id' => $hubunganPemilik,
|
||||
'name' => $row['name'],
|
||||
'detail_sertifikat' => null,
|
||||
'npwp' => null,
|
||||
'nomor_id' => null,
|
||||
'email' => null,
|
||||
'phone' => null,
|
||||
'province_code' => $proviceCode,
|
||||
'city_code' => $cityCode,
|
||||
'district_code' => $districtCode,
|
||||
'village_code' => $subdistrictCode['code'],
|
||||
'postal_code' => $subdistrictCode['postal_code'],
|
||||
'address' => $row['address'],
|
||||
'created_at' => $this->parseTimestamp($row['created_at']),
|
||||
'updated_at' => $this->parseTimestamp($row['updated_at']),
|
||||
'mig_kd_debitur_seq' => $row['mig_kd_debitur_seq'],
|
||||
'processed_at' => now(),
|
||||
'is_mig' => 1
|
||||
]);
|
||||
|
||||
$this->command->info('Proses data Pemilik Jaminan ' . $row['name'] . ' (' . ($index + 1) . '/' . count($rows) . ')');
|
||||
}
|
||||
}
|
||||
|
||||
private function getDebiturId(string $code, array &$cache): ?int
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$debitur = Debiture::where('mig_kd_debitur_seq', $code)->first();
|
||||
|
||||
if ($debitur) {
|
||||
$cache[$code] = $debitur->id;
|
||||
return $debitur->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getHubunganPemilikId(string $name, array &$cache): ?int
|
||||
{
|
||||
// Normalisasi nama
|
||||
$normalizedName = strtolower(trim($name));
|
||||
|
||||
// Cek cache untuk menghindari query berulang
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Query database dengan pengamanan tambahan
|
||||
$hubunganPemilik = HubunganPemilikJaminan::whereRaw('LOWER(name) = ?', [$normalizedName])
|
||||
->whereNull('deleted_at') // Tambahkan ini jika Anda menggunakan soft deletes
|
||||
->first();
|
||||
|
||||
// Jika data ditemukan, simpan dalam cache
|
||||
if ($hubunganPemilik) {
|
||||
$cache[$normalizedName] = $hubunganPemilik->id;
|
||||
return $hubunganPemilik->id;
|
||||
}
|
||||
|
||||
// Default jika data tidak ditemukan
|
||||
$cache[$normalizedName] = 1; // Cache nilai default untuk menghindari query berulang
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
private function getProvinceCode(string $name, array &$cache): ?string
|
||||
{
|
||||
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$province = Province::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($province) {
|
||||
$cache[$normalizedName] = $province->code;
|
||||
return $province->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getCityCode(string $name, array &$cache): ?string
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$city = City::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($city) {
|
||||
$cache[$normalizedName] = $city->code;
|
||||
return $city->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getDistrictCode(string $name, array &$cache): ?string
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
$district = District::whereRaw('LOWER(name) = ?', [strtolower($name)])->first();
|
||||
|
||||
if ($district) {
|
||||
$cache[$normalizedName] = $district->code;
|
||||
return $district->code;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getSubdistrictCode(string $name, array &$cache, array &$districtCache): ?array
|
||||
{
|
||||
$normalizedName = strtolower($name);
|
||||
|
||||
// Pastikan cache menyimpan array, bukan hanya kode
|
||||
if (isset($cache[$normalizedName])) {
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Ambil subdistrict dari database
|
||||
$subdistrict = Village::whereRaw('LOWER(name) = ?', [$normalizedName])->first();
|
||||
|
||||
// Jika ditemukan, simpan ke dalam cache sebagai array lengkap
|
||||
if ($subdistrict) {
|
||||
$cache[$normalizedName] = [
|
||||
'code' => $subdistrict->code,
|
||||
'postal_code' => $subdistrict->postal_code
|
||||
];
|
||||
return $cache[$normalizedName];
|
||||
}
|
||||
|
||||
// Jika tidak ditemukan, kembalikan null
|
||||
return [
|
||||
'code' => null,
|
||||
'postal_code' => null
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
private function parseDate(?string $date): ?string
|
||||
{
|
||||
try {
|
||||
return $date ? \Carbon\Carbon::createFromFormat('Y-m-d', $date)->toDateString() : null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing tanggal: ' . $date);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
return $timestamp ? \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString() : null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
435
database/seeders/MigrationPenilaiSeeder.php
Normal file
435
database/seeders/MigrationPenilaiSeeder.php
Normal file
@@ -0,0 +1,435 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Modules\Lpj\Models\DokumenJaminan;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
use Modules\Lpj\Models\Penilai;
|
||||
use Modules\Lpj\Models\Laporan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class MigrationPenilaiSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
protected $errorLogFile = __DIR__ . '/csv/penilai-laporan/mig_penilai_laporan_error.csv';
|
||||
public function run()
|
||||
{
|
||||
$this->initializeErrorLog();
|
||||
// Path ke file csv
|
||||
$filePath = realpath(__DIR__ . '/csv/penilai-laporan/mig_penilai_laporan.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File csv tidak ditemukan: ' . __DIR__ . '/csv/penilai-laporan/mig_penilai_laporan.csv');
|
||||
$this->command->error('File csv tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 500;
|
||||
$userData = [];
|
||||
$branchCache = []; // <-- Gunakan sebagai cache
|
||||
$totalData = 0;
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle);
|
||||
fgetcsv($handle, 0, '~'); // Skip header
|
||||
|
||||
$batchCount = 0;
|
||||
$currentRow = 0;
|
||||
$errorCount = 0;
|
||||
$errorDebitureIds = [];
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
Log::warning('Baris CSV memiliki jumlah kolom yang tidak sesuai: ' . json_encode($data));
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
// info_harga_laporan_202505021522.csv
|
||||
// print_r($rows);
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $userData, $errorCount, $errorDebitureIds, $totalData, $batchCount, $currentRow);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
$this->command->info("Data debiture berhasil dimigrasikan. Total data: {$totalData}, Total batch: {$batchCount}");
|
||||
}
|
||||
|
||||
|
||||
private function processBatch(array $rows, array &$branchCache, array &$userData, int &$errorCount, array &$errorDebitureIds, int $totalData, int $batchCount, int $currentRow)
|
||||
{
|
||||
// Kelompokkan berdasarkan mig_nomor_lpj
|
||||
$groupedRows = $this->groupRowsByLpj($rows);
|
||||
|
||||
foreach ($groupedRows as $nomorLpj => $groupRows) {
|
||||
try {
|
||||
// Ambil informasi permohonan dan dokument_id
|
||||
$nomorRegis = $this->getNomorRegistrasiPermohonan($nomorLpj, $branchCache);
|
||||
if (!$nomorRegis) {
|
||||
Log::warning("Nomor registrasi tidak ditemukan untuk nomor LPJ: {$nomorLpj}");
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorLpj;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Dapatkan type_penilai (misal: standar, sederhana)
|
||||
$firstRow = reset($groupRows);
|
||||
$typePenilai = $this->checkTypePenilai($firstRow['mig_kode_jenis_laporan'] ?? '');
|
||||
|
||||
if (!$typePenilai) {
|
||||
Log::warning("Tidak ada jenis laporan valid untuk nomor LPJ: {$nomorLpj}");
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorLpj;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Bangun JSON type_penilai
|
||||
$penilaiJson = $this->cekJenisPenilai($groupRows);
|
||||
|
||||
// Simpan ke tabel Penilai
|
||||
|
||||
// print_r(json_decode($penilaiJson, true));
|
||||
|
||||
// Mapping field JSON berdasarkan tipe penilaian
|
||||
$fillableFieldMap = [
|
||||
'memo' => 'memo',
|
||||
'standar' => 'lpj',
|
||||
'sederhana' => 'lpj',
|
||||
'call_report' => 'call_report',
|
||||
'rap' => 'rap',
|
||||
'resume' => 'resume'
|
||||
];
|
||||
|
||||
$fieldToUpdate = $fillableFieldMap[$typePenilai] ?? null;
|
||||
|
||||
if (!$fieldToUpdate) {
|
||||
Log::warning("Field tidak dikenali untuk tipe: {$typePenilai}");
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorLpj;
|
||||
continue;
|
||||
}
|
||||
|
||||
// NO: 001/241917/LPJ/PJ-2251/VII/24
|
||||
// 001 => kode cabang
|
||||
// 241917 => nomor lpj
|
||||
// LPJ => jenis laporan
|
||||
// PJ-2251 => nomor registrasi ambil nilai akhirnnya 242251
|
||||
// VII => bulan
|
||||
// 24 => tahun
|
||||
|
||||
// Generate nomor_laporan
|
||||
$tanggal = $firstRow['mig_crated_at'];
|
||||
$nomorD = $nomorRegis['nomor_registrasi'];
|
||||
$nomorRegistrasi = "PJ-{$nomorD}";
|
||||
$nomorLaporan = $this->generateNomorLaporan($typePenilai, $nomorLpj, $nomorRegistrasi, $tanggal);
|
||||
|
||||
|
||||
// Simpan atau update ke tabel Penilai
|
||||
$penilaiLP = Penilai::updateOrCreate(
|
||||
[
|
||||
'permohonan_id' => $nomorRegis['id'],
|
||||
'dokument_id' => $nomorRegis['dokument_id']
|
||||
],
|
||||
[
|
||||
'type' => $typePenilai,
|
||||
$fieldToUpdate => $penilaiJson,
|
||||
'type_penilai' => $typePenilai,
|
||||
'created_at' => $this->parseTimestamp($tanggal),
|
||||
'updated_at' => $this->parseTimestamp($tanggal),
|
||||
]
|
||||
);
|
||||
|
||||
// Simpan ke tabel Laporan
|
||||
Laporan::updateOrCreate(
|
||||
[
|
||||
'permohonan_id' => $penilaiLP->permohonan_id,
|
||||
'dokumen_jaminan_id' => $penilaiLP->dokument_id
|
||||
],
|
||||
[
|
||||
'nomor_laporan' => $nomorLaporan,
|
||||
'created_at' => $this->parseTimestamp($tanggal),
|
||||
'updated_at' => $this->parseTimestamp($tanggal)
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
$this->command->info("Berhasil simpan data penilai untuk nomor LPJ: {$nomorLpj}");
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error("Error pada nomor LPJ {$nomorLpj}: " . $e->getMessage());
|
||||
$errorCount++;
|
||||
$errorDebitureIds[] = $nomorLpj;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function getNomorRegistrasiPermohonan($nomorLpj, array &$cache)
|
||||
{
|
||||
if (isset($cache[$nomorLpj])) {
|
||||
return $cache[$nomorLpj];
|
||||
}
|
||||
|
||||
$permohonan = Permohonan::where('nomor_lpj', $nomorLpj)->first();
|
||||
|
||||
if (!$permohonan) {
|
||||
$cache[$nomorLpj] = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
$dokumenJaminan = DokumenJaminan::where('permohonan_id', $permohonan->id)->first();
|
||||
|
||||
$result = [
|
||||
'id' => $permohonan->id,
|
||||
'dokument_id' => $dokumenJaminan ? $dokumenJaminan->id : null,
|
||||
'nomor_registrasi' => $permohonan->nomor_registrasi
|
||||
];
|
||||
|
||||
$cache[$nomorLpj] = $result;
|
||||
|
||||
return $result;
|
||||
}
|
||||
private function groupRowsByLpj(array $rows): array
|
||||
{
|
||||
$grouped = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$nomorLpj = $row['mig_nomor_lpj'] ?? null;
|
||||
|
||||
if (!empty($nomorLpj)) {
|
||||
$grouped[$nomorLpj][] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
return $grouped;
|
||||
}
|
||||
|
||||
private function checkTypePenilai($type)
|
||||
{
|
||||
$data = [
|
||||
'MAK' => 'memo',
|
||||
'STD' => 'standar',
|
||||
'SPL' => 'sederhana',
|
||||
'RHP' => 'call-report',
|
||||
'RAP' => 'rap',
|
||||
'PRG' => 'resume',
|
||||
];
|
||||
|
||||
return $data[$type];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private function cekJenisPenilai(array $groupRows)
|
||||
{
|
||||
// Urutkan grup berdasarkan mig_urutan_seq
|
||||
usort($groupRows, function ($a, $b) {
|
||||
return ($a['mig_urutan_seq'] ?? 999) <=> ($b['mig_urutan_seq'] ?? 999);
|
||||
});
|
||||
|
||||
// Inisialisasi struktur JSON
|
||||
$penilaiJson = [
|
||||
'luas_tanah' => null,
|
||||
'nilai_tanah_1' => null,
|
||||
'nilai_tanah_2' => null,
|
||||
'sarana_pelengkap_penilai' => null,
|
||||
'nilai_sarana_pelengkap_1' => null,
|
||||
'nilai_sarana_pelengkap_2' => null,
|
||||
'total_nilai_pasar_wajar' => null,
|
||||
'likuidasi' => null,
|
||||
'likuidasi_nilai_1' => null,
|
||||
'likuidasi_nilai_2' => null,
|
||||
'asuransi_luas_bangunan' => null,
|
||||
'asuransi_nilai_1' => null,
|
||||
'asuransi_nilai_2' => "0",
|
||||
'npw_tambahan' => []
|
||||
];
|
||||
|
||||
// Ambil mainRow (urutan pertama)
|
||||
$mainRow = null;
|
||||
foreach ($groupRows as $row) {
|
||||
if (($row['mig_urutan_seq'] ?? '') == 1) {
|
||||
$mainRow = $row;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Jika tidak ada mainRow, ambil baris pertama sebagai fallback
|
||||
if (!$mainRow && !empty($groupRows[0])) {
|
||||
$mainRow = $groupRows[0];
|
||||
}
|
||||
|
||||
if ($mainRow) {
|
||||
$penilaiJson['total_nilai_pasar_wajar'] = $mainRow['mig_nilai_total_nilai_pasar'] ?? null;
|
||||
$penilaiJson['likuidasi'] = $mainRow['mig_nilai_likudasi'] ?? null;
|
||||
|
||||
// Hitung likuidasi nilai 2 jika ada total dan persen likuidasi
|
||||
$totalPasarWajar = (int)str_replace('.', '', $mainRow['mig_nilai_total_nilai_pasar'] ?? 0);
|
||||
$persenLikuidasi = (int)($mainRow['mig_nilai_likudasi'] ?? 0);
|
||||
$penilaiJson['likuidasi_nilai_1'] = $mainRow['mig_nilai_total_nilai_pasar'] ?? null;
|
||||
$penilaiJson['likuidasi_nilai_2'] = number_format(
|
||||
$totalPasarWajar * ($persenLikuidasi / 100),
|
||||
0,
|
||||
'',
|
||||
''
|
||||
);
|
||||
|
||||
// Isi data utama hanya untuk urutan 1
|
||||
$penilaiJson['luas_tanah'] = $mainRow['mig_nilai_satuan'] ?? null;
|
||||
$penilaiJson['nilai_tanah_1'] = $mainRow['mig_harga_satuan'] ?? null;
|
||||
$penilaiJson['nilai_tanah_2'] = number_format(
|
||||
(int)str_replace('.', '', $mainRow['mig_nilai_satuan'] ?? 0) *
|
||||
(int)str_replace('.', '', $mainRow['mig_harga_satuan'] ?? 0),
|
||||
0,
|
||||
'',
|
||||
''
|
||||
);
|
||||
}
|
||||
|
||||
// Proses tambahan (urutan > 1)
|
||||
foreach ($groupRows as $row) {
|
||||
// Skip baris dengan urutan_seq = 1 karena sudah diproses
|
||||
if (($row['mig_urutan_seq'] ?? '') == 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Hanya proses jika mig_urutan_seq ada
|
||||
$urutan = $row['mig_urutan_seq'] ?? '';
|
||||
if (empty($urutan)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Tambahkan ke npw_tambahan
|
||||
$penilaiJson['npw_tambahan'][] = [
|
||||
'name' => $row['mig_keterangan'] ?? 'Luas Bangunan Tambahan',
|
||||
'luas' => $row['mig_nilai_satuan'] ?? null,
|
||||
'nilai_1' => $row['mig_harga_satuan'] ?? null,
|
||||
'nilai_2' => number_format(
|
||||
(int)str_replace('.', '', $row['mig_nilai_satuan'] ?? 0) *
|
||||
(int)str_replace('.', '', $row['mig_harga_satuan'] ?? 0),
|
||||
0,
|
||||
'',
|
||||
''
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
// Kosongkan npw_tambahan jika kosong
|
||||
if (empty($penilaiJson['npw_tambahan'])) {
|
||||
$penilaiJson['npw_tambahan'] = [];
|
||||
}
|
||||
|
||||
return json_encode($penilaiJson, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
}
|
||||
|
||||
private function convertToRoman($month)
|
||||
{
|
||||
$roman = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII'];
|
||||
return $month >= 1 && $month <= 12 ? $roman[$month - 1] : '';
|
||||
}
|
||||
|
||||
private function generateNomorLaporan($typePenilai, $nomorLpj, $nomorRegistrasi, $tanggal)
|
||||
{
|
||||
// Mapping type_penilai ke singkatan laporan
|
||||
$laporanMap = [
|
||||
'memo' => 'MEMO',
|
||||
'standar' => 'LPJ',
|
||||
'sederhana' => 'LPJ',
|
||||
'call_report' => 'CALL',
|
||||
'rap' => 'RAP',
|
||||
'resume' => 'RESUME'
|
||||
];
|
||||
|
||||
// Dapatkan tahun dan bulan dari tanggal
|
||||
$date = \Carbon\Carbon::parse($tanggal);
|
||||
$kodeCabang = '001'; // bisa diambil dari user atau parameter lain jika dinamis
|
||||
$tahun = substr($date->year, -2); // 2024 → 24
|
||||
$bulan = $this->convertToRoman($date->month); // 7 → VII
|
||||
|
||||
// Format akhir nomor registrasi (PJ-XXX)
|
||||
$nomorDebiturAkhir = substr($nomorRegistrasi, -4); // PJ-2251 → 2251
|
||||
|
||||
return sprintf(
|
||||
"%s/%s/%s/%s/%s/%s",
|
||||
$kodeCabang,
|
||||
$nomorLpj,
|
||||
$laporanMap[$typePenilai] ?? strtoupper($typePenilai),
|
||||
"PJ-" . $nomorDebiturAkhir,
|
||||
$bulan,
|
||||
$tahun
|
||||
);
|
||||
}
|
||||
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
if ($timestamp) {
|
||||
// Cek jika format hanya tanggal (Y-m-d)
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $timestamp)) {
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d', $timestamp)
|
||||
->startOfDay()
|
||||
->toDateTimeString();
|
||||
}
|
||||
// Format lengkap (Y-m-d H:i:s)
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString();
|
||||
}
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp . '. Pesan: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
if (file_exists($file)) {
|
||||
unlink($file); // Hapus file lama
|
||||
}
|
||||
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_kd_debitur_seq', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError(string $kode, string $message)
|
||||
{
|
||||
Log::error("Error migrasi dokumen jaminan [$kode]: $message");
|
||||
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$kode, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
365
database/seeders/MigrationPermohonanSeeder.php
Normal file
365
database/seeders/MigrationPermohonanSeeder.php
Normal file
@@ -0,0 +1,365 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
use Modules\Lpj\Models\Debiture;
|
||||
use Modules\Basicdata\Models\Branch;
|
||||
use Modules\Usermanagement\Models\User;
|
||||
|
||||
|
||||
|
||||
class MigrationPermohonanSeeder extends Seeder
|
||||
{
|
||||
protected $errorLogFile = __DIR__ . '/csv/permohonan/error_permohonan.csv';
|
||||
|
||||
public function run()
|
||||
{
|
||||
// Bersihkan file error sebelum mulai
|
||||
$this->initializeErrorLog();
|
||||
|
||||
$filePath = realpath(__DIR__ . '/csv/permohonan/mig_permohonan.csv');
|
||||
|
||||
if (!$filePath) {
|
||||
Log::error('File CSV tidak ditemukan: ' . __DIR__ . '/csv/permohonan/mig_permohonan.csv');
|
||||
$this->command->error('File CSV tidak ditemukan.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($handle = fopen($filePath, 'r')) === false) {
|
||||
Log::error('Gagal membuka file CSV: ' . $filePath);
|
||||
$this->command->error('Gagal membuka file CSV.');
|
||||
return;
|
||||
}
|
||||
|
||||
$header = fgetcsv($handle, 0, '~');
|
||||
$rows = [];
|
||||
$batchSize = 1000;
|
||||
$branchCache = [];
|
||||
$debitureCache = [];
|
||||
$totalData = 0;
|
||||
$currentRow = 0;
|
||||
$batchCount = 0;
|
||||
|
||||
// Hitung total data
|
||||
while (fgetcsv($handle, 0, '~') !== false) {
|
||||
$totalData++;
|
||||
}
|
||||
|
||||
rewind($handle);
|
||||
fgetcsv($handle, 0, '~'); // Lewati header
|
||||
|
||||
while (($data = fgetcsv($handle, 0, '~')) !== false) {
|
||||
if (count($data) != count($header)) {
|
||||
$nomorJaminan = $data[array_search('mig_mst_jaminan_nomor_jaminan', $header)] ?? '-';
|
||||
$this->logError($nomorJaminan, 'Jumlah kolom tidak sesuai');
|
||||
continue;
|
||||
}
|
||||
|
||||
$rows[] = array_combine($header, $data);
|
||||
$currentRow++;
|
||||
|
||||
if (count($rows) >= $batchSize) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $debitureCache, $totalData, $batchCount);
|
||||
$rows = [];
|
||||
}
|
||||
}
|
||||
|
||||
print_r($rows[0]);
|
||||
|
||||
if (!empty($rows)) {
|
||||
$batchCount++;
|
||||
$this->command->info("Memproses batch ke-{$batchCount} ({$currentRow}/{$totalData})");
|
||||
$this->processBatch($rows, $branchCache, $debitureCache, $totalData, $batchCount);
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
$this->command->info("Migrasi selesai. Total data diproses: $totalData.");
|
||||
}
|
||||
|
||||
private function processBatch(array $rows, array &$branchCache, array &$debitureCache, int $totalData, int $batchCount)
|
||||
{
|
||||
$userData = [];
|
||||
foreach ($rows as $index => $row) {
|
||||
try {
|
||||
$nomorJaminan = $row['mig_mst_jaminan_nomor_jaminan'] ?? '-';
|
||||
|
||||
// Cek apakah sudah diproses
|
||||
$existingRecord = Permohonan::where('nomor_registrasi', $row['mig_mst_jaminan_nomor_jaminan'])->first();
|
||||
if ($existingRecord && $existingRecord->processed_at) {
|
||||
$this->command->info("Data sudah diproses: $nomorJaminan");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil branch_id
|
||||
$branchId = $this->getBranchId($row['mig_mst_jaminan_kd_cabang'] ?? null, $branchCache);
|
||||
if (!$branchId) {
|
||||
$this->logError($branchId, 'Cabang tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil Debitur ID
|
||||
$debitureId = $this->getDebiturId($row['mig_mst_jaminan_kd_debitur_seq'], $debitureCache);
|
||||
if (!$debitureId) {
|
||||
$this->logError($nomorJaminan, 'Debitur tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ambil User IDs
|
||||
$userId = $this->getUserId($row['mig_mst_jaminan_nama_ao'], $branchCache, true);
|
||||
$approved1Id = $this->getUserId($row['mig_mst_lpj_user_approved_1'], $branchCache, false);
|
||||
$approved2Id = $this->getUserId($row['mig_mst_lpj_user_approved_2'], $branchCache, false);
|
||||
|
||||
// Ambil user IDs berdasarkan NIK
|
||||
$userIdUpdate = $this->getUserIdData($row['mig_mst_jaminan_user_create'] ?? null, $userData)['id'];
|
||||
$userIdOtorisasi = $this->getUserIdData($row['mig_mst_jaminan_user_oto'] ?? null, $userData)['id'];
|
||||
|
||||
if (!$userIdUpdate || !$userIdOtorisasi) {
|
||||
$this->logError($userIdUpdate, 'Salah satu user tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Mapping field user
|
||||
$mapUser = [
|
||||
'created_by' => $userIdUpdate,
|
||||
'updated_by' => $userIdUpdate,
|
||||
'authorized_by' => $userIdOtorisasi,
|
||||
];
|
||||
|
||||
|
||||
|
||||
if (!$userId || !$approved1Id || !$approved2Id) {
|
||||
$this->logError($userId, 'Salah satu user tidak ditemukan');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Mapping data
|
||||
$jenisFasilitas = $this->checkJenisFasilitas($row['mig_mst_jaminan_kd_jenis_fas_seq']);
|
||||
$tujuanPenilaian = $this->checkTujuanPenilaian($row['mig_mst_jaminan_kd_tujuan_seq']);
|
||||
$regionId = $this->checkRegion($row['mig_mst_kode_kelompok_region']);
|
||||
|
||||
// Simpan data
|
||||
Permohonan::create([
|
||||
'nomor_registrasi' => $nomorJaminan,
|
||||
'tanggal_permohonan' => $this->parseDate($row['tanggal_permohonan']),
|
||||
'user_id' => $userId['id'],
|
||||
'branch_id' => $branchId,
|
||||
'tujuan_penilaian_id' => $tujuanPenilaian,
|
||||
'debiture_id' => $debitureId,
|
||||
'jenis_fasilitas_kredit_id' => $jenisFasilitas,
|
||||
'nilai_plafond_id' => 2,
|
||||
'status' => 'done',
|
||||
'approval_eo' => $approved2Id['id'] ?? 0,
|
||||
'approval_eo_at' => $this->parseTimestamp($row['mig_mst_lpj_tgl_approved_2']),
|
||||
'approval_dd' => 0,
|
||||
'approval_dd_at' => null,
|
||||
'approval_so' => $approved1Id['id'] ?? 0,
|
||||
'approval_so_at' => $this->parseTimestamp($row['mig_mst_lpj_tgl_approved_1']),
|
||||
'keterangan' => $row['mig_mst_jaminan_catatan'] ?? null,
|
||||
'status_bayar' => 'sudah_bayar',
|
||||
'created_at' => $this->parseTimestamp($row['mig_mst_jaminan_tgl_create']),
|
||||
'updated_at' => $this->parseTimestamp($row['mig_mst_jaminan_tgl_update']),
|
||||
'mig_kd_debitur_seq' => $row['mig_mst_jaminan_kd_debitur_seq'],
|
||||
'nomor_lpj' => $row['mig_mst_lpj_nomor_lpj'],
|
||||
'region_id' => $regionId,
|
||||
|
||||
'authorized_by' => $mapUser['authorized_by'],
|
||||
'created_by' => $mapUser['created_by'],
|
||||
'updated_by' => $mapUser['updated_by'],
|
||||
|
||||
'processed_at' => now(),
|
||||
'is_mig' => 1
|
||||
]);
|
||||
|
||||
$this->command->info("Proses data permohonan $nomorJaminan (" . ($index + 1) . '/' . count($rows) . " pada batch ke-$batchCount)");
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$nomorJaminan = $row['mig_mst_jaminan_nomor_jaminan'] ?? '-';
|
||||
$this->logError($nomorJaminan, "Error eksepsi: " . $e->getMessage());
|
||||
continue;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function getUserIdData(?string $code, array &$cache): array
|
||||
{
|
||||
if (!$code) return ['id' => null, 'branch_id' => null];
|
||||
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$user = User::where('nik', $code)->first();
|
||||
|
||||
if ($user) {
|
||||
$cache[$code] = ['id' => $user->id, 'branch_id' => $user->branch_id];
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
return ['id' => null, 'branch_id' => null];
|
||||
}
|
||||
|
||||
private function getUserId(string $value, array &$cache, bool $includeBranch = false): ?array
|
||||
{
|
||||
if (isset($cache[$value])) {
|
||||
return $cache[$value];
|
||||
}
|
||||
|
||||
$user = null;
|
||||
|
||||
if ($includeBranch) {
|
||||
$user = User::whereRaw('LOWER(name) = ?', [strtolower($value)])->first();
|
||||
} else {
|
||||
$user = User::where('nik', $value)->first();
|
||||
}
|
||||
|
||||
if ($user) {
|
||||
$result = ['id' => $user->id];
|
||||
if ($includeBranch) {
|
||||
$result['branch_id'] = $user->branch_id;
|
||||
}
|
||||
$cache[$value] = $result;
|
||||
return $result;
|
||||
}
|
||||
|
||||
return ['id' => null, 'branch_id' => null];
|
||||
}
|
||||
|
||||
private function getDebiturId(string $code, array &$cache): ?int
|
||||
{
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$debitur = Debiture::where('mig_kd_debitur_seq', $code)->first();
|
||||
|
||||
if ($debitur) {
|
||||
$cache[$code] = $debitur->id;
|
||||
return $debitur->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
private function getBranchId(?string $code, array &$cache): ?int
|
||||
{
|
||||
if (!$code) return null;
|
||||
|
||||
if (isset($cache[$code])) {
|
||||
return $cache[$code];
|
||||
}
|
||||
|
||||
$branch = Branch::where('code', $code)->first();
|
||||
|
||||
if ($branch) {
|
||||
$cache[$code] = $branch->id;
|
||||
return $branch->id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
private function checkJenisFasilitas($code): int
|
||||
{
|
||||
$mapping = [
|
||||
161337594516 => 1,
|
||||
161337598118 => 2,
|
||||
155739382483 => 7,
|
||||
2 => 9,
|
||||
153568936592 => 10,
|
||||
155737674431 => 11,
|
||||
161337561199 => 12,
|
||||
1 => 13,
|
||||
];
|
||||
|
||||
return $mapping[$code] ?? 0;
|
||||
}
|
||||
|
||||
private function checkTujuanPenilaian($code): int
|
||||
{
|
||||
$mapping = [
|
||||
1 => 1,
|
||||
2 => 2,
|
||||
3 => 9,
|
||||
4 => 10,
|
||||
5 => 8,
|
||||
6 => 3,
|
||||
];
|
||||
|
||||
return $mapping[$code] ?? 1;
|
||||
}
|
||||
|
||||
private function checkRegion($code): int
|
||||
{
|
||||
$mapping = [
|
||||
'01' => 1,
|
||||
'02' => 2,
|
||||
'04' => 3,
|
||||
'07' => 4,
|
||||
'06' => 5,
|
||||
];
|
||||
|
||||
return $mapping[$code] ?? 1;
|
||||
}
|
||||
|
||||
private function parseDate(?string $date): ?string
|
||||
{
|
||||
try {
|
||||
return $date ? \Carbon\Carbon::createFromFormat('Y-m-d', $date)->toDateString() : null;
|
||||
} catch (\Exception $e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function parseTimestamp(?string $timestamp): ?string
|
||||
{
|
||||
try {
|
||||
if ($timestamp) {
|
||||
// Cek jika format hanya tanggal (Y-m-d)
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $timestamp)) {
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d', $timestamp)
|
||||
->startOfDay()
|
||||
->toDateTimeString();
|
||||
}
|
||||
// Format lengkap (Y-m-d H:i:s)
|
||||
return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $timestamp)->toDateTimeString();
|
||||
}
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Gagal memparsing timestamp: ' . $timestamp . '. Pesan: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function initializeErrorLog()
|
||||
{
|
||||
$file = $this->errorLogFile;
|
||||
|
||||
// Hapus file lama jika ada
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
|
||||
// Buat file baru dengan header
|
||||
$handle = fopen($file, 'w');
|
||||
fputcsv($handle, ['mig_mst_jaminan_nomor_jaminan', 'Error']);
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
private function logError( $nomorJaminan, string $message)
|
||||
{
|
||||
Log::error("Error migrasi permohonan [$nomorJaminan]: $message");
|
||||
|
||||
// Tulis ke file error
|
||||
$handle = fopen($this->errorLogFile, 'a');
|
||||
fputcsv($handle, [$nomorJaminan, $message]);
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
16
database/seeders/PosisiKavlingSeeder.php
Normal file
16
database/seeders/PosisiKavlingSeeder.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class PosisiKavlingSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// $this->call([]);
|
||||
}
|
||||
}
|
||||
16
database/seeders/PosisiUnitSeeder.php
Normal file
16
database/seeders/PosisiUnitSeeder.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class PosisiUnitSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// $this->call([]);
|
||||
}
|
||||
}
|
||||
16
database/seeders/SaranaPelengkapSeeder.php
Normal file
16
database/seeders/SaranaPelengkapSeeder.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class SaranaPelengkapSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// $this->call([]);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ namespace Modules\Lpj\Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Modules\Lpj\Models\Teams;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
class TeamsSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
@@ -12,14 +12,6 @@ class TeamsSeeder extends Seeder
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
Teams::insert([
|
||||
[
|
||||
'regions_id' => 1,
|
||||
'code' => 'T01',
|
||||
'name' => 'Team 1',
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
]
|
||||
]);
|
||||
DB::unprepared(file_get_contents(__DIR__ . '/sql/teams.sql'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,38 @@ class TujuanPenilaianSeeder extends Seeder
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
'deleted_at' => null,
|
||||
],
|
||||
[
|
||||
'code' => 'TP0007',
|
||||
'name' => 'Jual Beli',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
'deleted_at' => null,
|
||||
],
|
||||
[
|
||||
'code' => 'TP0008',
|
||||
'name' => 'KPR eks BPPN',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
'deleted_at' => null,
|
||||
],
|
||||
[
|
||||
'code' => 'TP0009',
|
||||
'name' => 'Penambahan Fasilitas / Jaminan',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
],
|
||||
[
|
||||
'code' => 'TP00010',
|
||||
'name' => 'Penukaran Jaminan',
|
||||
'status' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now()
|
||||
]
|
||||
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
10
database/seeders/sql/fasilitas_objek.sql
Normal file
10
database/seeders/sql/fasilitas_objek.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
INSERT INTO `fasilitas_objek` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'FU001', 'Tempat Ibadah', 1, NULL, '2024-11-28 18:57:35', '2024-11-28 18:57:35', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'FU002', 'Rumah Sakit', 1, NULL, '2024-11-28 18:57:50', '2024-11-28 18:57:50', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'FU003', 'Sekolah', 1, NULL, '2024-11-28 18:58:05', '2024-11-28 18:58:05', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'FU004', 'Kantor Pemerintahan', 1, NULL, '2024-11-28 18:58:27', '2024-11-28 18:58:27', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'FU005', 'Stasiun Kereta', 1, NULL, '2024-11-28 18:58:49', '2024-11-28 18:58:49', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'FU006', 'Terminal Bus', 1, NULL, '2024-11-28 18:59:09', '2024-11-28 18:59:09', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'FU007', 'Bandara', 1, NULL, '2024-11-28 18:59:26', '2024-11-28 18:59:26', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(8, 'FU009', 'Pos Polisi', 1, NULL, '2024-11-28 18:59:50', '2024-11-28 18:59:50', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(9, 'FU010', 'Lainnya', 1, NULL, '2024-11-28 19:00:07', '2024-11-28 19:00:07', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/gol_mas_sekitar.sql
Normal file
4
database/seeders/sql/gol_mas_sekitar.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `gol_mas_sekitar` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'GMS001', 'Menengah', 1, NULL, '2024-11-05 00:36:23', '2024-11-05 00:36:23', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'GMS002', 'Menengah Bawah', 1, NULL, '2024-11-05 00:36:35', '2024-11-05 00:36:35', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'GMS003', 'Menengah Atas', 1, NULL, '2024-11-05 00:36:48', '2024-11-05 00:36:48', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
6
database/seeders/sql/jenis_bangunan.sql
Normal file
6
database/seeders/sql/jenis_bangunan.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
INSERT INTO `jenis_bangunan` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'JB001', 'Rumah', 1, NULL, '2024-11-04 21:43:16', '2024-11-04 21:43:16', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'JB002', 'Ruko', 1, NULL, '2024-11-04 21:43:28', '2024-11-04 21:43:28', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'JB003', 'Gudang', 1, NULL, '2024-11-04 21:43:41', '2024-11-04 21:43:41', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'JB004', 'Pabrik', 1, NULL, '2024-11-04 21:43:53', '2024-11-04 21:43:53', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'JB005', 'Lainnya', 1, NULL, '2024-11-04 21:44:08', '2024-11-04 21:44:08', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@@ -1,29 +1,44 @@
|
||||
INSERT INTO jenis_jaminan VALUES
|
||||
(1, 'JJ001', 'Tanah', 'tanah', '[\"tanah\", \"lingkungan\", \"fakta\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ005\",\"JLJ006\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'JJ002', 'Unit Apartemen', 'unit-apartemen', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ022\",\"JLJ024\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'JJ003', 'Kawasan Industrial / Komersil / Residensial - Perumahan', 'kawasan-industrial-komersil-residensial-perumahan', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ008\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'JJ004', 'Mall', 'mall', 'null', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ012\",\"JLJ013\",\"JLJ014\",\"JLJ015\",\"JLJ021\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'JJ005', 'Pabrik', 'pabrik', 'null', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ011\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'JJ006', 'Emas dan Perak', 'emas-dan-perak', 'null', '[\"JLJ001\",\"JLJ007\",\"JLJ014\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'JJ007', 'Alat Berat', 'alat-berat', 'null', '[\"JLJ004\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(8, 'JJ008', 'Rumah Tinggal', 'rumah-tinggal', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ024\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(9, 'JJ009', 'Full Properti', 'full-properti', '[\"tanah\", \"bangunan\", \"informasi\"]', '[\"JLJ001\",\"JLJ006\",\"JLJ007\",\"JLJ009\"]', 1, '2024-12-06 09:16:02', '2024-12-10 22:07:46', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(10, 'JJ010', 'Gudang', 'gudang', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\",\"JLJ009\",\"JLJ024\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(11, 'JJ011', 'Unit Kios', 'unit-kios', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ007\",\"JLJ009\",\"JLJ024\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12, 'JJ012', 'Gedung Mall', 'gedung-mall', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ007\",\"JLJ009\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(13, 'JJ013', 'Tanah Bangunan', 'tanah-bangunan', '[\"tanah\", \"bangunan\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ005\",\"JLJ007\",\"JLJ009\",\"JLJ022\",\"JLJ024\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(14, 'JJ014', 'Apartemen', 'apartemen', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ022\",\"JLJ024\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(15, 'JJ015', 'Ruko', 'ruko', '[\"tanah\", \"bangunan\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(16, 'JJ016', 'Mesin Tekstil', 'mesin-tekstil', '[\"mesin\"]', '[\"JLJ011\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(17, 'JJ017', 'Mesin', 'mesin', '[\"mesin\"]', '[\"JLJ011\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(18, 'JJ018', 'Mesin Tenun Tekstil', 'mesin-tenun-tekstil', '[\"mesin\"]', '[\"JLJ011\",\"JLJ022\"]', 1, '2024-12-06 09:16:02', '2024-12-06 09:16:02', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(19, 'JJ019', 'Penilaian Bisnis', 'penilaian-bisnis', '[\"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ007\",\"JLJ014\"]', 1, '2024-12-10 02:34:01', '2024-12-10 02:34:01', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(20, 'JJ020', 'Penilaian Tanah dan Bangunan', 'penilaian-tanah-dan-bangunan', '[\"tanah\", \"bangunan\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\"]', 1, '2024-12-10 02:34:54', '2024-12-10 02:34:54', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(21, 'JJ021', 'Penilaian Mesin', 'penilaian-mesin', '[\"mesin\"]', '[\"JLJ011\",\"JLJ022\"]', 1, '2024-12-10 03:00:13', '2024-12-10 03:00:13', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(22, 'JJ022', 'Penilian Kapal dan Pesawat', 'penilian-kapal-dan-pesawat', '[\"kapal\", \"pesawat\"]', '[\"JLJ011\",\"JLJ022\"]', 1, '2024-12-10 03:01:00', '2024-12-10 03:01:00', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(23, 'JJ023', 'Tanah Kosong', 'tanah-kosong', '[\"tanah\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\",\"JLJ022\"]', 1, '2024-12-10 03:18:24', '2024-12-10 03:18:24', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(24, 'JJ024', 'Tanah Kosong untuk dikembangkan', 'tanah-kosong-untuk-dikembangkan', '[\"tanah\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\",\"JLJ022\"]', 1, '2024-12-10 03:19:03', '2024-12-10 03:19:03', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(25, 'JJ025', 'Bisnis', 'bisnis', '[\"informasi\", \"lingkungan\"]', '[\"JLJ001\",\"JLJ007\"]', 1, '2024-12-10 22:09:26', '2024-12-10 22:09:26', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(26, 'JJ026', 'Properti Sederhana', 'properti-sederhana', '[\"lingkungan\", \"tanah\"]', '[\"JLJ001\",\"JLJ007\"]', 1, '2024-12-10 22:10:01', '2024-12-10 22:10:01', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(27, 'JJ027', 'Bangunan', 'bangunan', '[\"bangunan\"]', '[\"JLJ003\",\"JLJ007\"]', 1, '2024-12-12 08:13:41', '2024-12-12 08:13:41', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(28, 'JJ028', 'Kendaraan Bermotor', 'kendaraan-bermotor', '[\"kendaraan\"]', '[\"JLJ022\"]', 1, '2024-12-12 08:15:51', '2024-12-12 08:15:51', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
|
||||
INSERT INTO `jenis_jaminan` (`id`, `code`, `name`, `slug`, `form_kategori`, `jenis_legalitas_jaminan_id`, `status`, `created_at`, `updated_at`, `authorized_at`, `authorized_status`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`, `authorized_by`) VALUES
|
||||
(1, 'JJ001', 'Tanah kosong', 'tanah-kosong', '[\"tanah\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ005\",\"JLJ006\",\"JLJ022\"]', NULL, NULL, '2024-12-20 00:15:07', NULL, 't', NULL, NULL, 1, NULL, NULL),
|
||||
(2, 'JJ002', 'Unit Apartemen', 'unit-apartemen', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ022\",\"JLJ024\"]', NULL, NULL, '2024-12-03 03:38:02', NULL, 'r', NULL, NULL, 1, NULL, NULL),
|
||||
(3, 'JJ003', 'Kawasan Industrial / Komersil / Residensial - Perumahan', 'kawasan-industrial-komersil-residensial-perumahan', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ005\",\"JLJ007\",\"JLJ008\",\"JLJ009\",\"JLJ022\",\"JLJ024\",\"JLJ039\",\"JLJ040\"]', NULL, NULL, '2025-03-10 19:34:58', NULL, 'k', NULL, NULL, 1, NULL, NULL),
|
||||
(4, 'JJ004', 'Unit Kios', 'unit-kios', '[\"tanah\", \"bangunan\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ010\",\"JLJ022\"]', NULL, NULL, '2024-12-03 01:57:55', NULL, 'g', '2024-12-03 01:57:55', NULL, 1, 1, NULL),
|
||||
(6, 'JJ005', 'Mall', 'mall', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ012\",\"JLJ013\",\"JLJ014\",\"JLJ015\",\"JLJ021\",\"JLJ022\"]', 1, '2024-09-11 00:51:36', '2024-12-16 19:48:40', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(7, 'JJ006', 'Pabrik', 'pabrik', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ011\"]', 1, '2024-10-23 22:27:56', '2024-12-16 19:48:54', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(8, 'JJ007', 'Emas dan Perak', 'emas-dan-perak', NULL, '[\"JLJ008\",\"JLJ014\",\"JLJ022\"]', 1, '2024-12-02 02:40:42', '2024-12-02 02:40:58', NULL, NULL, '2024-12-02 02:40:58', 4, 4, 4, NULL),
|
||||
(9, 'JJ008', 'Emas dan Perak', 'emas-dan-perak', NULL, '[\"JLJ008\",\"JLJ014\",\"JLJ022\"]', 1, '2024-12-02 02:41:39', '2024-12-02 02:47:44', NULL, NULL, '2024-12-02 02:47:44', 4, 4, 4, NULL),
|
||||
(10, 'JJ009', 'Emas dan Perak', 'emas-dan-perak', NULL, '[\"JLJ001\",\"JLJ007\",\"JLJ014\",\"JLJ022\"]', 1, '2024-12-02 02:49:32', '2024-12-02 02:49:32', NULL, NULL, NULL, 4, 4, NULL, NULL),
|
||||
(11, 'JJ010', 'Alat Berat', 'alat-berat', 'null', '[\"JLJ004\",\"JLJ011\"]', 1, '2024-12-03 00:59:14', '2024-12-30 23:36:25', NULL, NULL, '2024-12-30 23:36:25', 1, 1, 1, NULL),
|
||||
(12, 'JJ011', 'Rumah Tinggal', 'rumah-tinggal', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ004\",\"JLJ006\",\"JLJ007\",\"JLJ009\",\"JLJ022\",\"JLJ024\"]', 1, '2024-12-03 01:12:23', '2024-12-19 00:11:01', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(13, 'JJ012', 'Pabrik', 'pabrik', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ006\",\"JLJ007\",\"JLJ009\"]', 1, '2024-12-03 01:55:14', '2024-12-03 01:55:14', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(14, 'JJ013', 'Gudang', 'gudang', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\",\"JLJ009\",\"JLJ022\",\"JLJ024\"]', 1, '2024-12-03 01:56:09', '2025-01-22 02:13:30', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(15, 'JJ014', 'Unit Kios', 'unit-kios', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ007\",\"JLJ009\",\"JLJ024\"]', 1, '2024-12-03 01:58:32', '2024-12-03 04:20:22', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(16, 'JJ015', 'Gedung Mall', 'gedung-mall', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ007\",\"JLJ009\"]', 1, '2024-12-03 01:59:41', '2024-12-03 01:59:41', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(17, 'JJ016', 'Tanah Bangunan', 'tanah-bangunan', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ005\",\"JLJ007\",\"JLJ009\",\"JLJ022\",\"JLJ024\",\"JLJ039\",\"JLJ040\"]', 1, '2024-12-03 02:01:20', '2025-03-10 19:35:15', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(18, 'JJ017', 'Apartemen', 'apartemen', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ022\",\"JLJ024\"]', 1, '2024-12-03 04:24:14', '2024-12-03 22:35:05', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(19, 'JJ018', 'Ruko/Rukan', 'rukorukan', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ007\",\"JLJ022\"]', 1, '2024-12-03 19:33:17', '2024-12-16 01:54:36', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(20, 'JJ019', 'Unit Kantor', 'unit-kantor', '[\"apartemen-kantor\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ005\"]', 1, '2024-12-16 01:56:38', '2024-12-16 19:51:00', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(21, 'JJ020', 'Pesawat', 'pesawat', '[\"pesawat\"]', '[\"JLJ001\",\"JLJ004\"]', 1, '2024-12-16 01:58:21', '2024-12-16 01:58:21', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(22, 'JJ021', 'SPBU', 'spbu', '[\"tanah\", \"bangunan\", \"lingkungan\", \"fakta\", \"informasi\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ005\"]', 1, '2024-12-16 01:59:22', '2024-12-16 01:59:22', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(23, 'JJ022', 'Alat Berat', 'alat-berat', '[\"alat-berat\"]', '[\"JLJ004\",\"JLJ006\",\"JLJ011\"]', 1, '2024-12-30 23:37:10', '2024-12-30 23:45:54', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(24, 'JJ023', 'Lainnya', 'lainnya', '[\"tanah\", \"bangunan\"]', '[\"JLJ001\",\"JLJ007\"]', 1, '2025-03-05 21:30:11', '2025-03-05 21:30:11', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(25, 'JJ024', 'Hotel', 'hotel', '[\"bangunan\", \"tanah\"]', '[\"JLJ001\",\"JLJ003\",\"JLJ006\",\"JLJ007\",\"JLJ008\",\"JLJ009\",\"JLJ011\",\"JLJ013\",\"JLJ014\",\"JLJ015\",\"JLJ016\",\"JLJ017\",\"JLJ020\",\"JLJ021\",\"JLJ022\",\"JLJ024\",\"JLJ028\",\"JLJ036\"]', 1, '2025-03-09 02:01:45', '2025-03-09 02:01:45', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(26, 'JJ025', 'Kendaraan', 'kendaraan', '[\"kendaraan\"]', 'null', 1, '2025-04-18 05:42:13', '2025-04-18 05:42:13', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(27, 'JJ026', 'Mesin', 'mesin', 'null', 'null', 1, '2025-04-18 05:45:21', '2025-04-18 05:45:21', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(28, 'JJ027', 'Barang Elektronik', 'barang-elektronik', 'null', 'null', 1, '2025-04-18 05:47:28', '2025-04-18 05:47:28', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(29, 'JJ028', 'Furniture', 'furniture', 'null', 'null', 1, '2025-04-18 05:49:22', '2025-04-18 05:49:22', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(30, 'JJ029', 'Perlengkapan', 'perlengkapan', 'null', 'null', 1, '2025-04-18 05:51:00', '2025-04-18 05:51:00', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(31, 'JJ030', 'Persediaan Barang', 'persediaan-barang', 'null', 'null', 1, '2025-04-18 05:52:08', '2025-04-18 05:52:08', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(32, 'JJ031', 'Kapal', 'kapal', 'null', 'null', 1, '2025-04-18 05:53:26', '2025-04-18 05:53:26', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(33, 'JJ032', 'Deposito Berjangka', 'deposito-berjangka', 'null', 'null', 1, '2025-04-18 05:57:44', '2025-04-18 05:57:44', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(34, 'JJ033', 'Sertifikat Deposito', 'sertifikat-deposito', 'null', 'null', 1, '2025-04-18 05:58:57', '2025-04-18 05:58:57', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(35, 'JJ034', 'Rekening Giro / Tabungan', 'rekening-giro-tabungan', 'null', 'null', 1, '2025-04-18 05:59:56', '2025-04-18 05:59:56', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(36, 'JJ035', 'Barang Dagangan', 'barang-dagangan', 'null', 'null', 1, '2025-04-18 06:03:51', '2025-04-18 06:03:51', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(37, 'JJ036', 'Piutang Dagang', 'piutang-dagang', 'null', 'null', 1, '2025-04-18 06:04:59', '2025-04-18 06:04:59', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(38, 'JJ037', 'Jaminan Pribadi', 'jaminan-pribadi', 'null', 'null', 1, '2025-04-18 06:05:57', '2025-04-18 06:05:57', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(39, 'JJ038', 'Jaminan Perusahaan', 'jaminan-perusahaan', 'null', 'null', 1, '2025-04-18 06:06:53', '2025-04-18 06:06:53', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(40, 'JJ039', 'Resi Gudang', 'resi-gudang', 'null', 'null', 1, '2025-04-18 06:07:41', '2025-04-18 06:07:41', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(41, 'JJ040', 'Surat Berharga dan Saham', 'surat-berharga-dan-saham', 'null', 'null', 1, '2025-04-18 06:08:32', '2025-04-18 06:08:32', NULL, NULL, NULL, 1, 1, NULL, NULL),
|
||||
(42, 'JJ041', 'Tanah Kavling (Kerjasama)', 'tanah-kavling-kerjasama', 'null', 'null', 1, '2025-04-18 06:09:31', '2025-04-18 06:09:31', NULL, NULL, NULL, 1, 1, NULL, NULL);
|
||||
|
||||
10
database/seeders/sql/jenis_kapal.sql
Normal file
10
database/seeders/sql/jenis_kapal.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
INSERT INTO `jenis_kapal` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'JK001', 'Fishing Boat', 1, NULL, '2024-11-28 18:33:01', '2024-11-28 18:33:01', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'JK002', 'Tugboat', 1, NULL, '2024-11-28 18:33:55', '2024-11-28 18:33:55', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'JK003', 'Tongkang', 1, NULL, '2024-11-28 18:34:15', '2024-11-28 18:34:15', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'JK004', 'Self Propelled Oil Barge', 1, NULL, '2024-11-28 18:34:30', '2024-11-28 18:34:30', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'JK005', 'Dredger', 1, NULL, '2024-11-28 18:34:49', '2024-11-28 18:34:49', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'JK006', 'General Cargo', 1, NULL, '2024-11-28 18:35:09', '2024-11-28 18:35:09', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'JK007', 'Container Ship', 1, NULL, '2024-11-28 18:35:35', '2024-11-28 18:35:35', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(8, 'JK008', 'Oli Tangker', 1, NULL, '2024-11-28 18:36:04', '2024-11-28 18:36:04', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(9, 'JK009', 'Passenger Ship', 1, NULL, '2024-11-28 18:36:40', '2024-11-28 18:36:40', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
7
database/seeders/sql/jenis_kendaraan.sql
Normal file
7
database/seeders/sql/jenis_kendaraan.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
INSERT INTO `jenis_kendaraan` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'JK001', 'Mobil Penumpang', 1, NULL, '2024-11-28 02:18:01', '2024-11-28 02:18:01', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'JK002', 'Mobil Bus', 1, NULL, '2024-11-28 02:18:15', '2024-11-28 02:18:15', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'JK003', 'Mobil Barang', 1, NULL, '2024-11-28 02:18:36', '2024-11-28 02:18:36', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'JK004', 'Sepeda Motor', 1, NULL, '2024-11-28 02:18:51', '2024-11-28 02:18:51', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'JK005', 'Kendaraan Khusus', 1, NULL, '2024-11-28 02:19:18', '2024-11-28 02:19:18', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'JK006', 'Truk', 1, NULL, '2024-11-28 02:19:34', '2024-11-28 02:19:34', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@@ -21,4 +21,33 @@ INSERT INTO `jenis_legalitas_jaminan` (`code`, `created_at`, `custom_field`, `cu
|
||||
('JLJ020', '2024-12-06 09:04:50', NULL, NULL, NULL, 'Rate Kamar pertipe, Jumlah Kamar, Luas Kamar Pertipe', 'rate-kamar-pertipe-jumlah-kamar-luas-kamar-pertipe', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ021', '2024-12-06 09:04:50', NULL, NULL, NULL, 'Analisis Kompetitor', 'analisis-kompetitor', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ022', '2024-12-06 09:04:50', NULL, NULL, NULL, 'Bukti Bayar', 'bukti-bayar', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ024', '2024-12-06 09:04:50', NULL, NULL, NULL, 'PPJB', 'ppjb', 1, '2024-12-06 09:04:50');
|
||||
('JLJ024', '2024-12-06 09:04:50', NULL, NULL, NULL, 'PPJB', 'ppjb', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ025', '2024-12-06 09:04:50', NULL, NULL, NULL, 'LOKASI JAMINAN', 'lokasi-jaminan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ026', '2024-12-06 09:04:50', NULL, NULL, NULL, 'KEPEMILIKAN', 'kepemilikan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ027', '2024-12-06 09:04:50', NULL, NULL, NULL, 'STATUS KEPEMILIKAN, HUBUNGAN DAN PENGHUNI', 'status-kepemilikan-hubungan-dan-penghuni', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ028', '2024-12-06 09:04:50', NULL, NULL, NULL, 'ANALISA TANAH DAN BANGUNAN', 'analisa-tanah-dan-bangunan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ029', '2024-12-06 09:04:50', NULL, NULL, NULL, 'SARANA PELENGKAP DAN LINGKUNGAN', 'sarana-pelengkap-dan-lingkungan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ030', '2024-12-06 09:04:50', NULL, NULL, NULL, 'STATUS PEMILIKAN', 'status-pemilikan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ031', '2024-12-06 09:04:50', NULL, NULL, NULL, 'KONDISI DAN SARANA PELENGKAP KENDARAAN', 'kondisi-dan-sarana-pelengkap-kendaraan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ032', '2024-12-06 09:04:50', NULL, NULL, NULL, 'BARANG YANG DIPERIKSA', 'barang-yang-diperiksa', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ033', '2024-12-06 09:04:50', NULL, NULL, NULL, 'LOKASI, TEMPAT DAN STATUS TEMPAT PENYIMPANAN BARANG', 'lokasi-tempat-dan-status-tempat-penyimpanan-barang', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ034', '2024-12-06 09:04:50', NULL, NULL, NULL, 'KONDISI DAN DOKUMENTASI PENYIMPANAN BARANG', 'kondisi-dan-dokumentasi-penyimpanan-barang', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ035', '2024-12-06 09:04:50', NULL, NULL, NULL, 'KONDISI / SISTEM PENGAMANAN DAN LINGKUNGAN TEMPAT PENYIMPANAN BARANG', 'kondisi-sistem-pengamanan-dan-lingkungan-tempat-penyimpanan-barang', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ036', '2024-12-06 09:04:50', NULL, NULL, NULL, 'KONDISI MESIN', 'kondisi-mesin', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ037', '2024-12-06 09:04:50', NULL, NULL, NULL, 'CATATAN', 'catatan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ038', '2024-12-06 09:04:50', NULL, NULL, NULL, 'EMAS', 'emas', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ039', '2024-12-06 09:04:50', NULL, NULL, NULL, 'ALAT BERAT', 'alat-berat', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ040', '2024-12-06 09:04:50', NULL, NULL, NULL, 'DEPOSITO', 'deposito', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ041', '2024-12-06 09:04:50', NULL, NULL, NULL, 'BARANG DAGANGAN', 'barang-dagangan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ042', '2024-12-06 09:04:50', NULL, NULL, NULL, 'PIUTANG DAGANG', 'piutang-dagang', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ043', '2024-12-06 09:04:50', NULL, NULL, NULL, 'JAMINAN PRIBADI', 'jaminan-pribadi', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ044', '2024-12-06 09:04:50', NULL, NULL, NULL, 'JAMINAN PERUSAHAAN', 'jaminan-perusahaan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ045', '2024-12-06 09:04:50', NULL, NULL, NULL, 'RESI GUDANG', 'resi-gudang', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ046', '2024-12-06 09:04:50', NULL, NULL, NULL, 'Surat Berharga dan Saham', 'surat-berharga-dan-saham', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ047', '2024-12-06 09:04:50', NULL, NULL, NULL, 'Tanah dan Bangunan (Kerjasama)', 'tanah-dan-bangunan-kerjasama', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ048', '2024-12-06 09:04:50', NULL, NULL, NULL, 'Tanah Kavling (Kerjasama)', 'tanah-kavling-kerjasama', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ049', '2024-12-06 09:04:50', NULL, NULL, NULL, 'JENIS KAPAL DAN STATUS KEPEMILIKAN', 'jenis-kapal-dan-status-kepemilikan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ050', '2024-12-06 09:04:50', NULL, NULL, NULL, 'KONDISI DAN SARANA PELENGKAP KAPAL', 'kondisi-dan-sarana-pelengkap-kapal', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ051', '2024-12-06 09:04:50', NULL, NULL, NULL, 'REKENING GIRO / TABUNGAN', 'rekening-giro-tabungan', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ052', '2024-12-06 09:04:50', NULL, NULL, NULL, 'DATA TANAH', 'data-tanah', 1, '2024-12-06 09:04:50'),
|
||||
('JLJ053', '2024-12-06 09:04:50', NULL, NULL, NULL, 'DATA BANGUNAN', 'data-bangunan', 1, '2024-12-06 09:04:50');
|
||||
|
||||
7
database/seeders/sql/jenis_pesawat.sql
Normal file
7
database/seeders/sql/jenis_pesawat.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
INSERT INTO `jenis_pesawat` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'JP001', 'Penumpang Komersil', 1, NULL, '2024-11-28 18:37:59', '2024-11-28 18:37:59', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'JP002', 'Milliter', 1, NULL, '2024-11-28 18:38:13', '2024-11-28 18:38:13', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'JP003', 'Cargo', 1, NULL, '2024-11-28 18:38:26', '2024-11-28 18:38:26', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'JP004', 'Helikopter', 1, NULL, '2024-11-28 18:38:39', '2024-11-28 18:38:39', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'JP005', 'Pribadi', 1, NULL, '2024-11-28 18:38:56', '2024-11-28 18:38:56', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'JP006', 'Lainnya', 1, NULL, '2024-11-28 18:39:13', '2024-11-28 18:39:13', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
2
database/seeders/sql/jenis_unit.sql
Normal file
2
database/seeders/sql/jenis_unit.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
INSERT INTO `jenis_unit` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'JU001', 'H', 1, NULL, '2024-11-28 18:54:44', '2024-11-28 18:54:44', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
5
database/seeders/sql/ketinggian_tanah.sql
Normal file
5
database/seeders/sql/ketinggian_tanah.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
INSERT INTO `ketinggian_tanah` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(2, 'KT001', 'Sama Dengan Jalan', 1, NULL, '2024-11-05 00:28:23', '2024-11-05 00:28:23', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'KT002', 'Lebih Tinggi', 1, NULL, '2024-11-05 00:28:50', '2024-11-25 21:20:57', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'KT004', 'Lebih Rendah', 1, NULL, '2024-11-05 00:31:20', '2024-11-25 21:21:05', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'KT005', 'Bervariasi', 1, NULL, '2024-11-05 00:31:48', '2024-11-05 00:31:48', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
7
database/seeders/sql/kondisi_bangunan.sql
Normal file
7
database/seeders/sql/kondisi_bangunan.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
INSERT INTO `kondisi_bangunan` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(2, 'KB001', 'Cukup Terawat', 1, NULL, '2024-11-05 00:32:53', '2024-11-05 00:32:53', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'KB002', 'Kurang Terawat', 1, NULL, '2024-11-05 00:33:08', '2024-11-05 00:33:08', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'KB003', 'Tidak Terawat', 1, NULL, '2024-11-05 00:33:24', '2024-11-05 00:33:24', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'KB004', 'Hancur/Tidak Layak Ditinggali', 1, NULL, '2024-11-05 00:33:55', '2024-11-05 00:33:55', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'KB005', 'Terawat', 1, NULL, '2025-03-07 02:47:03', '2025-03-07 02:47:03', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
5
database/seeders/sql/kondisi_fisik_tanah.sql
Normal file
5
database/seeders/sql/kondisi_fisik_tanah.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
INSERT INTO `kondisi_fisik_tanah` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'KFT001', 'Tanah Darat', 1, NULL, '2024-11-04 21:41:58', '2024-11-04 21:41:58', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'KFT002', 'Sawah', 1, NULL, '2024-11-04 21:42:11', '2024-11-04 21:42:11', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'KFT003', 'Urukan', 1, NULL, '2024-11-04 21:42:24', '2024-11-04 21:42:24', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'KFT004', 'Bukit', 1, NULL, '2024-11-04 21:42:38', '2024-11-04 21:42:38', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
5
database/seeders/sql/kontur_tanah.sql
Normal file
5
database/seeders/sql/kontur_tanah.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
INSERT INTO `kontur_tanah` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'KT001', 'Rata', 1, NULL, '2024-11-04 21:31:11', '2024-11-04 21:31:11', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'KT002', 'Tidak Rata', 1, NULL, '2024-11-04 21:31:25', '2024-11-04 21:31:25', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'KT003', 'Berbukit', 1, NULL, '2024-11-04 21:37:07', '2024-11-04 21:37:07', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'KT004', 'Bergelombang', 1, NULL, '2024-11-04 21:37:27', '2024-11-04 21:37:27', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/lalu_lintas_lokasi.sql
Normal file
4
database/seeders/sql/lalu_lintas_lokasi.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `lalu_lintas_lokasi` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'LD001', 'Satu Arah', 1, NULL, '2025-01-22 23:23:31', '2025-01-22 23:23:31', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'LD002', 'Dua Arah - Satu Jalur', 1, NULL, '2025-01-22 23:23:46', '2025-01-22 23:23:46', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'LD003', 'Dua Arah - Dua Jalur', 1, NULL, '2025-01-22 23:24:04', '2025-01-22 23:24:04', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/lantai.sql
Normal file
4
database/seeders/sql/lantai.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `lantai` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'LU001', 'Rendah', 1, NULL, '2024-11-05 02:06:00', '2024-11-05 02:06:00', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'LU003', 'Tinggi', 1, NULL, '2024-11-05 02:06:35', '2024-11-05 02:06:35', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'LU002', 'Menengah', 1, NULL, '2024-11-05 02:07:02', '2024-11-05 02:07:02', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/merupakan_daerah.sql
Normal file
4
database/seeders/sql/merupakan_daerah.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `merupakan_daerah` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'MD001', 'Bebas Banjir', 1, NULL, '2024-11-28 18:56:17', '2024-11-28 18:56:17', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'MD002', 'Rawan Banjir', 1, NULL, '2024-11-28 18:56:37', '2024-11-28 18:56:37', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'MD003', 'Sering Banjir', 1, NULL, '2024-11-28 18:56:56', '2024-11-28 18:56:56', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
3
database/seeders/sql/model_alat_berat.sql
Normal file
3
database/seeders/sql/model_alat_berat.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
INSERT INTO `model_alat_berat` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'MA001', 'Excavator', 1, NULL, '2024-11-28 02:13:48', '2024-11-28 02:13:48', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'MA002', 'Grader', 1, NULL, '2024-11-28 02:14:02', '2024-11-28 02:14:02', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
8
database/seeders/sql/perkerasan_jalan.sql
Normal file
8
database/seeders/sql/perkerasan_jalan.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
INSERT INTO `perkerasan_jalan` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'PJ001', 'Aspal', 1, NULL, '2024-12-09 02:25:15', '2024-12-09 02:25:15', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'PJ002', 'Beton', 1, NULL, '2024-12-09 02:25:28', '2024-12-09 02:25:28', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'PJ003', 'Conblock', 1, NULL, '2024-12-09 02:25:44', '2024-12-09 02:25:44', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'PJ004', 'Sirtu', 1, NULL, '2024-12-09 02:25:56', '2024-12-09 02:25:56', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'PJ006', 'Belum ada perkerasan', 1, NULL, '2024-12-09 02:26:13', '2024-12-09 02:26:13', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'PJ007', 'Semen', 1, NULL, '2024-12-20 00:23:31', '2024-12-20 00:23:31', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'PJ008', 'Lainnya', 1, NULL, '2024-12-20 00:23:45', '2024-12-20 00:23:45', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
6
database/seeders/sql/posisi_kavling.sql
Normal file
6
database/seeders/sql/posisi_kavling.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
INSERT INTO `posisi_kavling` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'PK001', 'Badan', 1, NULL, '2024-11-04 21:38:18', '2024-11-04 21:38:18', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'PK002', 'Pojok', 1, NULL, '2024-11-04 21:38:29', '2024-11-04 21:38:29', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'PK003', 'Hook', 1, NULL, '2024-11-04 21:38:38', '2024-11-04 21:38:38', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'PK004', 'Kuldesak', 1, NULL, '2024-11-04 21:38:59', '2024-11-04 21:38:59', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'PK005', 'Lainnya', 1, NULL, '2024-11-04 21:39:47', '2024-11-04 21:39:47', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/posisi_unit.sql
Normal file
4
database/seeders/sql/posisi_unit.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `posisi_unit` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'PU001', 'Tengah/Badan', 1, NULL, '2024-12-09 18:28:41', '2024-12-09 18:28:41', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'PU002', 'Pojok', 1, NULL, '2024-12-09 18:28:58', '2024-12-09 18:28:58', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'PU003', 'Tusuk Sate', 1, NULL, '2024-12-09 18:29:14', '2024-12-09 18:29:14', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
10
database/seeders/sql/sarana_pelengkap.sql
Normal file
10
database/seeders/sql/sarana_pelengkap.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
INSERT INTO `sarana_pelengkap` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'SP001', 'Pagar', 1, NULL, '2024-11-04 21:53:34', '2024-11-04 21:53:34', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'SP002', 'Perkerasan', 1, NULL, '2024-11-04 21:53:50', '2024-11-04 21:53:50', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'SP003', 'Kanopi', 1, NULL, '2024-11-04 21:54:13', '2024-11-04 21:54:13', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'SP004', 'Air', 1, NULL, '2024-11-04 21:54:57', '2024-11-04 21:54:57', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'SP005', 'Listrik', 1, NULL, '2024-11-04 21:55:13', '2024-11-04 21:55:13', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'SP006', 'kolam renang', 1, NULL, '2024-12-15 19:25:09', '2024-12-15 19:25:09', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(8, 'SP007', 'carport', 1, NULL, '2024-12-15 19:25:58', '2024-12-15 19:25:58', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(9, 'SP008', 'teras', 1, NULL, '2024-12-15 19:26:38', '2024-12-15 19:26:38', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(10, 'SP009', 'Lainnya', 1, NULL, '2024-12-15 19:26:50', '2024-12-15 19:26:50', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/sifat_bangunan.sql
Normal file
4
database/seeders/sql/sifat_bangunan.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `sifat_bangunan` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'SB001', 'Permanen', 1, NULL, '2024-11-05 00:09:46', '2024-11-05 00:09:46', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'SB002', 'Semi Permanen', 1, NULL, '2024-11-05 00:10:03', '2024-11-05 00:10:03', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'SB003', 'Tidak Permanen', 1, NULL, '2024-11-05 00:10:22', '2024-11-05 00:10:22', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
70
database/seeders/sql/spek_bangunan.sql
Normal file
70
database/seeders/sql/spek_bangunan.sql
Normal file
@@ -0,0 +1,70 @@
|
||||
INSERT INTO `spek_bangunan` (`id`, `code`, `name`, `spek_kategori_bangunan_id`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'SPB001', 'Tapak Beton', 3, 1, NULL, '2024-11-05 20:22:33', '2024-11-05 20:22:33', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'SPB002', 'Batu Kali', 3, 1, NULL, '2024-11-05 20:39:42', '2024-11-05 20:39:42', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'SPB003', 'Lainnya', 3, 1, NULL, '2024-11-05 20:39:58', '2024-11-05 20:39:58', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'SPB004', 'Beton Bertulang', 4, 1, NULL, '2024-11-05 20:40:43', '2024-11-05 20:40:43', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'SPB005', 'Lainnya', 4, 1, NULL, '2024-11-05 20:41:01', '2024-11-05 20:41:01', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(8, 'SPB006', 'Dak Beton', 5, 1, NULL, '2024-11-05 20:42:12', '2024-11-05 20:42:12', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(9, 'SPB007', 'Kayu (Atap Asbes)', 5, 1, NULL, '2024-11-05 21:25:05', '2024-11-05 21:25:05', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(10, 'SPB008', 'Kayu (Atap Genteng)', 5, 1, NULL, '2024-11-05 21:25:36', '2024-11-05 21:25:36', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(11, 'SPB009', 'Baja Ringan (Atap Asbes)', 5, 1, NULL, '2024-11-05 21:26:28', '2024-11-05 21:26:28', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12, 'SPB010', 'Baja Ringan (Atap Genteng)', 5, 1, NULL, '2024-11-05 21:28:43', '2024-11-05 21:28:43', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(13, 'SPB011', 'Lainnya', 5, 1, NULL, '2024-11-05 21:29:07', '2024-11-05 21:29:07', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(15, 'SPB012', 'Asbes', 6, 1, NULL, '2024-11-05 21:30:39', '2024-11-05 21:30:39', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(16, 'SPB013', 'Dak Beton', 6, 1, NULL, '2024-11-05 21:39:28', '2024-11-05 21:39:28', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(17, 'SPB014', 'Fibreglass', 6, 1, NULL, '2024-11-05 21:42:05', '2024-11-05 21:42:05', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(18, 'SPB015', 'Ganteng Tanah Liat', 6, 1, NULL, '2024-11-05 21:42:27', '2024-11-05 21:42:27', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(19, 'SPB016', 'Genteng Beton', 6, 1, NULL, '2024-11-05 21:42:46', '2024-11-05 21:42:46', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(20, 'SPB017', 'Genteng Metal', 6, 1, NULL, '2024-11-05 21:43:16', '2024-11-05 21:43:16', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(21, 'SPB018', 'Seng Gelombang', 6, 1, NULL, '2024-11-05 21:43:48', '2024-11-05 21:43:48', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(22, 'SPB019', 'Spandek', 6, 1, NULL, '2024-11-05 21:44:21', '2024-11-05 21:44:21', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(23, 'SPB020', 'PVC', 6, 1, NULL, '2024-11-05 21:44:37', '2024-11-05 21:44:37', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(24, 'SPB021', 'Genteng Keramik', 6, 1, NULL, '2024-11-05 21:44:58', '2024-11-05 21:44:58', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(25, 'SPB022', 'Lainnya', 6, 1, NULL, '2024-11-05 21:45:15', '2024-11-05 21:45:15', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(26, 'SPB023', 'Asbes', 7, 1, NULL, '2024-11-05 21:45:57', '2024-11-05 21:45:57', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(27, 'SPB024', 'Beton Ekspos', 7, 1, NULL, '2024-11-05 21:46:30', '2024-11-05 21:46:30', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(28, 'SPB025', 'GRC', 7, 1, NULL, '2024-11-05 21:46:46', '2024-11-05 21:46:46', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(29, 'SPB026', 'Gypsum', 7, 1, NULL, '2024-11-05 21:46:59', '2024-11-05 21:46:59', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(30, 'SPB027', 'Triplek', 7, 1, NULL, '2024-11-05 21:47:19', '2024-11-05 21:47:19', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(31, 'SPB028', 'Lambreserring', 7, 1, NULL, '2024-11-05 21:47:57', '2024-11-05 21:47:57', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(32, 'SPB029', 'Lainnya', 7, 1, NULL, '2024-11-05 21:48:11', '2024-11-05 21:48:11', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(34, 'SPB031', 'Batako', 8, 1, NULL, '2024-11-05 21:49:34', '2024-11-05 21:49:34', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(35, 'SPB032', 'Bata Merah', 8, 1, NULL, '2024-11-05 21:49:49', '2024-11-05 21:49:49', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(36, 'SPB033', 'Bata Ringan', 8, 1, NULL, '2024-11-05 21:50:06', '2024-11-05 21:50:06', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(37, 'SPB034', 'Gypsumboard 2 Muka', 8, 1, NULL, '2024-11-05 21:50:39', '2024-11-05 21:50:39', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(38, 'SPB035', 'Rooster Bata', 8, 1, NULL, '2024-11-05 21:50:58', '2024-11-05 21:50:58', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(39, 'SPB036', 'Lainnya', 8, 1, NULL, '2024-11-05 21:51:37', '2024-11-05 21:51:37', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(41, 'SPB038', 'Dilapisi Cat', 9, 1, NULL, '2024-11-05 21:52:34', '2024-11-05 21:52:34', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(42, 'SPB039', 'Dilapis Batu Alam', 9, 1, NULL, '2024-11-05 21:53:02', '2024-11-05 21:53:02', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(43, 'SPB040', 'Dilapis Keramik', 9, 1, NULL, '2024-11-05 21:54:44', '2024-11-05 21:54:44', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(44, 'SPB041', 'Dilapis Marmer Lokal', 9, 1, NULL, '2024-11-05 21:55:04', '2024-11-05 21:55:04', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(45, 'SPB042', 'Dilapis Marmer Import', 9, 1, NULL, '2024-11-05 21:55:26', '2024-11-05 21:55:26', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(46, 'SPB043', 'Dilapis Granit', 9, 1, NULL, '2024-11-05 21:57:24', '2024-11-05 21:57:24', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(47, 'SPB044', 'Dilapis Wallpaper', 9, 1, NULL, '2024-11-05 21:57:43', '2024-11-05 21:57:43', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(48, 'SPB045', 'Lainnya', 9, 1, NULL, '2024-11-05 21:58:00', '2024-11-05 21:58:00', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(49, 'SPB046', 'Pintu Panil', 10, 1, NULL, '2024-11-05 21:58:32', '2024-11-05 21:58:32', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(50, 'SPB048', 'Pintu Kayu Panil', 10, 1, NULL, '2024-11-05 21:59:45', '2024-11-05 21:59:45', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(51, 'SPB049', 'Pntu Kayu Double Triplek', 10, 1, NULL, '2024-11-05 22:00:16', '2024-11-05 22:00:16', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(52, 'SPB050', 'Pntu Kaca RK Alumunium', 10, 1, NULL, '2024-11-05 22:01:13', '2024-11-05 22:01:13', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(53, 'SPB051', 'Pntu Kaca RK Alumunium', 10, 1, NULL, '2024-11-05 23:08:03', '2024-11-05 23:08:03', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(54, 'SPB052', 'Pintu Kaca Tempered Floor', 10, 1, NULL, '2024-11-05 23:08:39', '2024-11-05 23:08:39', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(55, 'SPB053', 'Pntu KM UPVC/PVC', 10, 1, NULL, '2024-11-05 23:09:10', '2024-11-05 23:09:10', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(56, 'SPB054', 'Pintu Garasi Kayu', 10, 1, NULL, '2024-11-05 23:09:46', '2024-11-05 23:09:46', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(57, 'SPB055', 'Pintu Garasi Besi', 10, 1, NULL, '2024-11-05 23:10:09', '2024-11-05 23:10:09', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(58, 'SPB056', 'Jendela Kaca RK Kayu', 10, 1, NULL, '2024-11-05 23:10:39', '2024-11-05 23:10:39', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(59, 'SPB057', 'Jendela Kaca RK Alumunium', 10, 1, NULL, '2024-11-05 23:13:05', '2024-11-05 23:13:05', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(60, 'SPB058', 'Jendela Kaca Stopsol 8mm Curtail w All', 10, 1, NULL, '2024-11-05 23:14:32', '2024-11-05 23:14:32', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(61, 'SPB059', 'Jendela Kaca Tempered Frameless', 10, 1, NULL, '2024-11-05 23:15:57', '2024-11-05 23:15:57', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(62, 'SPB060', 'Lainnya', 10, 1, NULL, '2024-11-05 23:20:37', '2024-11-05 23:20:37', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(63, 'SPB061', 'Granit/Homogenus Tile', 11, 1, NULL, '2024-11-05 23:21:51', '2024-11-05 23:21:51', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(64, 'SPB062', 'Granit Import', 11, 1, NULL, '2024-11-05 23:22:19', '2024-11-05 23:22:19', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(65, 'SPB063', 'Karpet', 11, 1, NULL, '2024-11-05 23:22:41', '2024-11-05 23:22:41', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(66, 'SPB064', 'Keramik', 11, 1, NULL, '2024-11-05 23:23:11', '2024-11-05 23:23:11', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(67, 'SPB065', 'Marmer Import', 11, 1, NULL, '2024-11-05 23:24:26', '2024-11-05 23:24:26', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(68, 'SPB066', 'Mozaik', 11, 1, NULL, '2024-11-05 23:24:43', '2024-11-05 23:24:43', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(69, 'SPB067', 'Rabat Beton (Semen Ekspose)', 11, 1, NULL, '2024-11-05 23:25:10', '2024-11-05 23:25:10', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(70, 'SPB068', 'Parkit Jati', 11, 1, NULL, '2024-11-05 23:27:59', '2024-11-05 23:27:59', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(71, 'SPB069', 'Teraso', 11, 1, NULL, '2024-11-05 23:28:14', '2024-11-05 23:28:14', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(72, 'SPB070', 'Vynil', 11, 1, NULL, '2024-11-05 23:28:42', '2024-11-05 23:28:42', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(73, 'SPB071', 'Lainnya', 11, 1, NULL, '2024-11-05 23:29:29', '2024-11-05 23:29:29', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(74, 'SPB030', 'Baja', 4, 1, NULL, '2024-12-29 21:45:39', '2024-12-29 21:45:39', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
10
database/seeders/sql/spek_kategori_bangunan.sql
Normal file
10
database/seeders/sql/spek_kategori_bangunan.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
INSERT INTO `spek_kategori_bangunan` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(3, 'KB001', 'Pondasi', 1, NULL, '2024-11-05 01:10:30', '2024-11-05 01:10:30', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'KB002', 'Struktur', 1, NULL, '2024-11-05 01:10:56', '2024-11-05 01:10:56', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 'KB003', 'Rangka Atap', 1, NULL, '2024-11-05 01:11:20', '2024-11-05 01:11:20', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(6, 'KB004', 'Tutup Atap', 1, NULL, '2024-11-05 01:11:38', '2024-11-05 01:11:38', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(7, 'KB005', 'Plafond', 1, NULL, '2024-11-05 01:11:56', '2024-11-05 01:11:56', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(8, 'KB006', 'Dinding', 1, NULL, '2024-11-05 01:45:06', '2024-11-05 01:45:06', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(9, 'KB007', 'Pelapis Dinding', 1, NULL, '2024-11-05 01:45:36', '2024-11-05 01:45:36', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(10, 'KB008', 'Pintu Jendela', 1, NULL, '2024-11-05 01:46:06', '2024-11-05 01:46:06', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(11, 'KB009', 'Lantai', 1, NULL, '2024-11-05 01:46:46', '2024-11-05 01:46:46', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
6
database/seeders/sql/teams.sql
Normal file
6
database/seeders/sql/teams.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
INSERT INTO `teams` (`id`, `regions_id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 1, 'T01', 'Team 1', NULL, NULL, '2024-09-18 23:48:39', '2024-09-18 23:48:39', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 2, 'T02', 'Team 2', NULL, NULL, '2024-10-30 20:41:34', '2024-10-30 20:41:34', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 5, 'T05', 'Tim 5', NULL, NULL, '2024-10-30 22:09:17', '2024-10-30 23:44:26', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 3, 'T03', 'Team 3', NULL, NULL, '2024-10-30 23:24:56', '2024-10-30 23:24:56', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(5, 4, 'T04', 'Team 4', NULL, NULL, '2024-10-30 23:42:27', '2024-10-30 23:42:27', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
5
database/seeders/sql/terletak_area.sql
Normal file
5
database/seeders/sql/terletak_area.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
INSERT INTO `terletak_area` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'TA001', 'Perumahan', 1, NULL, '2024-11-28 18:30:19', '2024-11-28 18:30:19', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'TA002', 'Pemukiman', 1, NULL, '2024-11-28 18:30:35', '2024-11-28 18:30:35', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'TA003', 'Komersil', 1, NULL, '2024-11-28 18:30:54', '2024-11-28 18:30:54', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'TA004', 'Lainnya', 1, NULL, '2024-11-28 18:31:09', '2024-11-28 18:31:09', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
4
database/seeders/sql/tingkat_keramaian.sql
Normal file
4
database/seeders/sql/tingkat_keramaian.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
INSERT INTO `tingkat_keramaian` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'TK001', 'Ramai', 1, NULL, '2024-11-05 00:30:18', '2024-11-05 00:30:18', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'TK002', 'Cukup Ramai', 1, NULL, '2024-11-05 00:31:12', '2024-11-05 00:31:12', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'TK003', 'Sepi', 1, NULL, '2024-11-05 00:32:17', '2024-11-05 00:32:17', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
6
database/seeders/sql/view_unit.sql
Normal file
6
database/seeders/sql/view_unit.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
INSERT INTO `view_unit` (`id`, `code`, `name`, `status`, `authorized_status`, `created_at`, `updated_at`, `authorized_at`, `authorized_by`, `deleted_at`, `created_by`, `updated_by`, `deleted_by`) VALUES
|
||||
(1, 'VU001', 'Kota', 1, NULL, '2024-11-05 02:08:37', '2024-11-05 02:08:37', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(2, 'VU002', 'Laut', 1, NULL, '2024-11-05 02:09:44', '2024-11-05 02:09:44', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(3, 'VU003', 'Kolam Renang', 1, NULL, '2024-11-05 02:10:04', '2024-11-05 02:10:04', NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(4, 'VU004', 'Lainnya', 1, NULL, '2024-11-05 02:10:19', '2024-11-05 02:10:19', NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
Reference in New Issue
Block a user