Upload Pariwisata dan report pariwisata
This commit is contained in:
96
app/Imports/TourismImport.php
Normal file
96
app/Imports/TourismImport.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Imports;
|
||||
|
||||
use App\Models\Tourism;
|
||||
use Illuminate\Support\Collection;
|
||||
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use DateTime;
|
||||
|
||||
class TourismImport implements ToCollection
|
||||
{
|
||||
protected static $processed = false;
|
||||
/**
|
||||
* Process each row in the file.
|
||||
*/
|
||||
public function collection(Collection $rows)
|
||||
{
|
||||
if (self::$processed) {
|
||||
return;
|
||||
}
|
||||
self::$processed = true;
|
||||
|
||||
if ($rows->isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Ambil data districts dengan normalisasi nama
|
||||
$districts = DB::table('districts')
|
||||
->get()
|
||||
->mapWithKeys(function ($item) {
|
||||
return [strtolower(trim($item->district_name)) => $item->district_code];
|
||||
})
|
||||
->toArray();
|
||||
// Cari header secara otomatis
|
||||
$header = $rows->first();
|
||||
$headerIndex = collect($header)->search(fn($value) => !empty($value));
|
||||
|
||||
// Pastikan header ditemukan
|
||||
if ($headerIndex === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
info($rows);
|
||||
|
||||
foreach ($rows->skip(1) as $row) {
|
||||
// Normalisasi nama kecamatan dan desa
|
||||
$districtName = strtolower(trim(str_replace('Kecamatan', '', $row[13])));
|
||||
$villageName = strtolower(trim($row[14]));
|
||||
|
||||
// Cari distric_code dari table districts
|
||||
$districtCode = $districts[$districtName] ?? null;
|
||||
|
||||
$listTrueVillage = DB::table('villages')
|
||||
->where('district_code', $districtCode)
|
||||
->get()
|
||||
->mapWithKeys(function ($item) {
|
||||
return [strtolower(trim($item->village_name)) => [
|
||||
'village_code' => $item->village_code,
|
||||
'district_code' => $item->district_code
|
||||
]];
|
||||
})
|
||||
->toArray();
|
||||
|
||||
// ambill village code yang village_name sama dengan $villageName
|
||||
$villageCode = $listTrueVillage[$villageName]['village_code'] ?? '000000';
|
||||
|
||||
$dataToInsert[] = [
|
||||
'project_id' => $row[1],
|
||||
'jenis_proyek' => $row[2],
|
||||
'nib' => $row[3],
|
||||
'business_name' => $row[4],
|
||||
'terbit_oss' => DateTime::createFromFormat('d/m/Y', $row[5])->format('Y-m-d'),
|
||||
'status_penanaman_modal' => $row[6],
|
||||
'business_form' => $row[7],
|
||||
'uraian_resiko_proyek' => $row[8],
|
||||
'project_name' => $row[9],
|
||||
'business_type_id' => $row[10],
|
||||
'business_scale_id' => (int) $row[11],
|
||||
'business_address' => $row[12],
|
||||
'district_code' => $districtCode,
|
||||
'village_code' => $villageCode,
|
||||
'land_area' => $row[15],
|
||||
'investment_amount' => (string) $row[16],
|
||||
'number_of_employee' => (string) $row[17],
|
||||
];
|
||||
}
|
||||
|
||||
if(!empty($dataToInsert)) {
|
||||
Tourism::insert($dataToInsert);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user