create service count floor level and retributions
This commit is contained in:
216
database/seeders/BuildingFunctionFormulaConfigSeeder.php
Normal file
216
database/seeders/BuildingFunctionFormulaConfigSeeder.php
Normal file
@@ -0,0 +1,216 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\BuildingFunctionFormulaConfig;
|
||||
use App\Models\BuildingFunction;
|
||||
use App\Models\MasterFormula;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class BuildingFunctionFormulaConfigSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
// Mapping Building Function Codes to IDs (sesuai dengan BuildingFunctionSeeder)
|
||||
$buildingFunctionMapping = [
|
||||
'AGAMA' => 1, // Fungsi Keagamaan
|
||||
'SOSIAL_BUDAYA' => 2, // Fungsi Sosial Budaya
|
||||
'CAMPURAN_KECIL' => 6, // Campuran Kecil
|
||||
'CAMPURAN_BESAR' => 7, // Campuran Besar
|
||||
'USAHA_KECIL' => 8, // UMKM
|
||||
'USAHA_BESAR' => 9, // Usaha Besar (Non-Mikro)
|
||||
'HUNIAN_SEDERHANA' => 10, // Hunian Sederhana <100
|
||||
'HUNIAN_TIDAK_SEDERHANA' => 11, // Hunian Tidak Sederhana >100
|
||||
];
|
||||
|
||||
// Get Formula IDs (akan dibuat di MasterFormulaSeeder)
|
||||
$formulaMapping = [
|
||||
'BEBAS' => 'RETRIBUSI_BEBAS',
|
||||
'DASAR' => 'RETRIBUSI_DASAR',
|
||||
'LENGKAP' => 'RETRIBUSI_DENGAN_PRASARANA'
|
||||
];
|
||||
|
||||
// Configurations per Building Function dan Floor Level
|
||||
$configs = [];
|
||||
|
||||
// 1. FUNGSI KEAGAMAAN - Bebas Retribusi (semua lantai)
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['AGAMA'],
|
||||
'formula_code' => 'RETRIBUSI_BEBAS',
|
||||
'floor_level' => 0, // Berlaku untuk semua lantai
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => 'Bangunan keagamaan bebas retribusi untuk semua lantai'
|
||||
];
|
||||
|
||||
// 2. FUNGSI SOSIAL BUDAYA - Formula dengan parameter khusus
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['SOSIAL_BUDAYA'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "Sosial budaya lantai {$floor} - menggunakan parameter khusus sosial budaya"
|
||||
];
|
||||
}
|
||||
|
||||
// 3. CAMPURAN KECIL - Formula per lantai
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['CAMPURAN_KECIL'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "Campuran kecil lantai {$floor} - parameter fungsi 0.6"
|
||||
];
|
||||
}
|
||||
|
||||
// 4. CAMPURAN BESAR - Formula per lantai
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['CAMPURAN_BESAR'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "Campuran besar lantai {$floor} - parameter fungsi 0.8"
|
||||
];
|
||||
}
|
||||
|
||||
// 5. UMKM - Formula per lantai
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['USAHA_KECIL'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "UMKM lantai {$floor} - parameter fungsi 0.5"
|
||||
];
|
||||
}
|
||||
|
||||
// 6. USAHA BESAR - Formula per lantai
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['USAHA_BESAR'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "Usaha besar lantai {$floor} - parameter fungsi 0.7"
|
||||
];
|
||||
}
|
||||
|
||||
// 7. HUNIAN SEDERHANA - Formula khusus dengan IP Kompleksitas 0.3
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['HUNIAN_SEDERHANA'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "Hunian sederhana lantai {$floor} - parameter fungsi 0.15, IP kompleksitas 0.3"
|
||||
];
|
||||
}
|
||||
|
||||
// 8. HUNIAN TIDAK SEDERHANA - Formula standar
|
||||
for ($floor = 1; $floor <= 6; $floor++) {
|
||||
$configs[] = [
|
||||
'building_function_id' => $buildingFunctionMapping['HUNIAN_TIDAK_SEDERHANA'],
|
||||
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
|
||||
'floor_level' => $floor,
|
||||
'min_floor' => null,
|
||||
'max_floor' => null,
|
||||
'multiplier' => 1.0000,
|
||||
'is_active' => true,
|
||||
'priority' => 1,
|
||||
'notes' => "Hunian tidak sederhana lantai {$floor} - parameter fungsi 0.17"
|
||||
];
|
||||
}
|
||||
|
||||
// Insert configurations
|
||||
foreach ($configs as $config) {
|
||||
// Get formula ID
|
||||
$formula = DB::table('master_formulas')
|
||||
->where('formula_code', $config['formula_code'])
|
||||
->first();
|
||||
|
||||
if ($formula) {
|
||||
DB::table('building_function_formula_configs')->updateOrInsert(
|
||||
[
|
||||
'building_function_id' => $config['building_function_id'],
|
||||
'formula_id' => $formula->id,
|
||||
'floor_level' => $config['floor_level']
|
||||
],
|
||||
[
|
||||
'min_floor' => $config['min_floor'],
|
||||
'max_floor' => $config['max_floor'],
|
||||
'multiplier' => $config['multiplier'],
|
||||
'is_active' => $config['is_active'],
|
||||
'priority' => $config['priority'],
|
||||
'notes' => $config['notes'],
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->command->info('Building Function Formula Configurations seeded successfully!');
|
||||
$this->command->info('=== CONFIGURATION SUMMARY ===');
|
||||
$this->command->info('Total configurations created: ' . count($configs));
|
||||
|
||||
// Summary per building function
|
||||
$summary = [];
|
||||
foreach ($configs as $config) {
|
||||
$buildingFunctionId = $config['building_function_id'];
|
||||
if (!isset($summary[$buildingFunctionId])) {
|
||||
$summary[$buildingFunctionId] = 0;
|
||||
}
|
||||
$summary[$buildingFunctionId]++;
|
||||
}
|
||||
|
||||
foreach ($buildingFunctionMapping as $code => $id) {
|
||||
$count = $summary[$id] ?? 0;
|
||||
$this->command->info("{$code}: {$count} configurations");
|
||||
}
|
||||
|
||||
$this->command->info('=== KEY FEATURES ===');
|
||||
$this->command->info('✓ Fungsi Keagamaan: Bebas retribusi semua lantai');
|
||||
$this->command->info('✓ Setiap fungsi bangunan memiliki parameter berbeda');
|
||||
$this->command->info('✓ Setiap lantai memiliki IP ketinggian berbeda');
|
||||
$this->command->info('✓ Hunian sederhana: IP kompleksitas khusus 0.3');
|
||||
$this->command->info('✓ Formula dapat disesuaikan per fungsi dan lantai');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user