|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Imports;
|
|
|
|
|
|
|
|
use App\Models\m_warehouse;
|
|
|
|
use Illuminate\Validation\Rule;
|
|
|
|
use Illuminate\Support\Collection;
|
|
|
|
use Illuminate\Support\MessageBag;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
use Maatwebsite\Excel\Concerns\ToModel;
|
|
|
|
use Maatwebsite\Excel\Events\AfterImport;
|
|
|
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
|
|
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
|
|
|
|
|
class WarehouseImport implements ToModel, WithHeadingRow
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @param array $row
|
|
|
|
*
|
|
|
|
* @return \Illuminate\Database\Eloquent\Model|null
|
|
|
|
*/
|
|
|
|
private $rowCount = 0;
|
|
|
|
private $errors;
|
|
|
|
|
|
|
|
public function model(array $row)
|
|
|
|
{
|
|
|
|
$requiredColumns = ['nama_gudang', 'deskripsi_gudang', 'alamat'];
|
|
|
|
|
|
|
|
foreach ($requiredColumns as $column) {
|
|
|
|
if (!array_key_exists($column, $row) || empty($row[$column])) {
|
|
|
|
$this->errors[] = 'Kolom ' . $column . ' pada baris ' . $this->rowCount . ' tidak boleh kosong.';
|
|
|
|
return null; // Abaikan data dengan kolom yang tidak sesuai
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mendapatkan informasi pengguna yang sedang login
|
|
|
|
$user = Auth::user();
|
|
|
|
|
|
|
|
// Cek apakah nama warehouse sudah ada dalam database
|
|
|
|
$existingWarehouse = m_warehouse::where('name', $row['nama_gudang'])->first();
|
|
|
|
|
|
|
|
if ($existingWarehouse) {
|
|
|
|
// Jika nama warehouse sudah ada, tambahkan pesan kesalahan ke dalam array $errors
|
|
|
|
$this->errors[] = new MessageBag(['Row ' . $this->rowCount => 'Data warehouse sudah ada dalam database.']);
|
|
|
|
return null; // Abaikan data yang sudah ada
|
|
|
|
}
|
|
|
|
|
|
|
|
// Increment rowCount setiap kali ada data yang diimpor
|
|
|
|
$this->rowCount++;
|
|
|
|
|
|
|
|
// Buat model baru jika nama warehouse belum ada
|
|
|
|
return new m_warehouse([
|
|
|
|
'name' => strtoupper($row['nama_gudang']),
|
|
|
|
'description' => strtoupper($row['deskripsi_gudang']),
|
|
|
|
'address' => strtoupper($row['alamat']),
|
|
|
|
'created_by' => $user->fullname,
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function registerEvents(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
AfterImport::class => function (AfterImport $event) {
|
|
|
|
// Setelah import selesai, kita bisa mengakses semua data yang diimpor
|
|
|
|
$importedData = $event->getReader()->getDelegate()->getActiveSheet()->toArray();
|
|
|
|
|
|
|
|
// Lakukan pemeriksaan apakah ada data yang bernilai null dan hapus dari hasil import
|
|
|
|
$filteredData = array_filter($importedData, function ($row) {
|
|
|
|
return $row[0] !== null; // Jika nilai kolom pertama tidak null, pertahankan baris tersebut
|
|
|
|
});
|
|
|
|
|
|
|
|
// Update hasil import dengan data yang telah difilter
|
|
|
|
$event->getReader()->getDelegate()->getActiveSheet()->fromArray($filteredData);
|
|
|
|
},
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getErrors()
|
|
|
|
{
|
|
|
|
return $this->errors;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getRowCount()
|
|
|
|
{
|
|
|
|
return $this->rowCount;
|
|
|
|
}
|
|
|
|
}
|