|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Imports;
|
|
|
|
|
|
|
|
use App\Models\Peti;
|
|
|
|
use App\Models\Customer;
|
|
|
|
use App\Models\Type_peti;
|
|
|
|
use App\Models\m_warehouse;
|
|
|
|
use App\Models\Kondisi_Peti;
|
|
|
|
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 PetiImport implements ToModel, WithHeadingRow
|
|
|
|
// {
|
|
|
|
// /**
|
|
|
|
// * @param array $row
|
|
|
|
// *
|
|
|
|
// * @return \Illuminate\Database\Eloquent\Model|null
|
|
|
|
// */
|
|
|
|
|
|
|
|
// private $rowCount = 0;
|
|
|
|
// private $errors;
|
|
|
|
|
|
|
|
// public function model(array $row)
|
|
|
|
// {
|
|
|
|
// // Mendapatkan informasi pengguna yang sedang login
|
|
|
|
// $user = Auth::user();
|
|
|
|
|
|
|
|
// // Cek apakah nama warehouse sudah ada dalam database
|
|
|
|
// $existingPeti = Peti::where('fix_lot', $row['fix_lot'])->first();
|
|
|
|
|
|
|
|
// if ($existingPeti) {
|
|
|
|
// // Jika nama warehouse sudah ada, tambahkan pesan kesalahan ke dalam array $errors
|
|
|
|
// $this->errors[] = new MessageBag(['Row ' . $this->rowCount => 'Data Peti sudah ada dalam database.']);
|
|
|
|
// return null; // Abaikan data yang sudah ada
|
|
|
|
// }
|
|
|
|
|
|
|
|
// // Increment rowCount setiap kali ada data yang diimpor
|
|
|
|
// $this->rowCount++;
|
|
|
|
|
|
|
|
// return new Peti([
|
|
|
|
// 'created_by' => $user->fullname,
|
|
|
|
// 'tipe_peti_id' => $row['tipe_peti_id'],
|
|
|
|
// 'warna' => $row['warna'],
|
|
|
|
// 'customer_id' => $row['customer_id'],
|
|
|
|
// 'warehouse_id' => $row['warehouse_id'],
|
|
|
|
// 'date_pembuatan' => now(),
|
|
|
|
// 'kondisipeti_id' => $row['kondisipeti_id'],
|
|
|
|
// 'packing_no' => $row['packing_no'],
|
|
|
|
// 'fix_lot' => $row['fix_lot'],
|
|
|
|
// 'status' => $row['status'],
|
|
|
|
// ]);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
class PetiImport implements ToModel, WithHeadingRow
|
|
|
|
{
|
|
|
|
private $rowCount = 0;
|
|
|
|
private $errors;
|
|
|
|
|
|
|
|
public function model(array $row)
|
|
|
|
{
|
|
|
|
$user = Auth::user();
|
|
|
|
|
|
|
|
$existingPeti = Peti::where('fix_lot', $row['fix_lot'])->first();
|
|
|
|
|
|
|
|
if ($existingPeti) {
|
|
|
|
$this->errors[] = new MessageBag(['Row ' . $this->rowCount => 'Data Peti sudah ada dalam database.']);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$tipePeti = Type_peti::firstOrCreate(
|
|
|
|
['type' => $row['tipe_peti_id']],
|
|
|
|
['size_peti' => 'Default Size', 'description' => 'Default Description']
|
|
|
|
);
|
|
|
|
|
|
|
|
$customer = Customer::firstOrCreate(
|
|
|
|
['name' => $row['customer_id']],
|
|
|
|
['code_customer' => 'Default Code', 'lot_no' => 'Default Lot No', 'no_tlp' => 'Default No Tlp', 'address' => 'Default Address']
|
|
|
|
);
|
|
|
|
|
|
|
|
$warehouse = m_warehouse::firstOrCreate(
|
|
|
|
['name' => $row['warehouse_id']],
|
|
|
|
['description' => 'Default Description', 'address' => 'Default Address']
|
|
|
|
);
|
|
|
|
|
|
|
|
$kondisiPeti = Kondisi_Peti::firstOrCreate(
|
|
|
|
['nama_kondisi' => $row['kondisipeti_id']],
|
|
|
|
['deskripsi_kondisi' => 'Default Deskripsi']
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->rowCount++;
|
|
|
|
|
|
|
|
return new Peti([
|
|
|
|
'created_by' => $user->fullname,
|
|
|
|
'tipe_peti_id' => $tipePeti->id,
|
|
|
|
'warna' => $row['warna'],
|
|
|
|
'customer_id' => $customer->id,
|
|
|
|
'warehouse_id' => $warehouse->id,
|
|
|
|
'date_pembuatan' => now(),
|
|
|
|
'kondisipeti_id' => $kondisiPeti->id,
|
|
|
|
'packing_no' => $row['packing_no'],
|
|
|
|
'fix_lot' => $row['fix_lot'],
|
|
|
|
'status' => $row['status'],
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function registerEvents(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
AfterImport::class => function (AfterImport $event) {
|
|
|
|
$importedData = $event->getReader()->getDelegate()->getActiveSheet()->toArray();
|
|
|
|
$filteredData = array_filter($importedData, function ($row) {
|
|
|
|
return $row[0] !== null;
|
|
|
|
});
|
|
|
|
|
|
|
|
$event->getReader()->getDelegate()->getActiveSheet()->fromArray($filteredData);
|
|
|
|
},
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getErrors()
|
|
|
|
{
|
|
|
|
return $this->errors;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getRowCount()
|
|
|
|
{
|
|
|
|
return $this->rowCount;
|
|
|
|
}
|
|
|
|
}
|