Browse Source

update import berdasarkan format

master
Gunawan19621 10 months ago
parent
commit
8be63dfdf3
  1. 25
      app/Http/Controllers/CustomerController.php
  2. 24
      app/Http/Controllers/KondisiPetiController.php
  3. 107
      app/Http/Controllers/PetiController.php
  4. 63
      app/Http/Controllers/Report/PetternLotPetiController.php
  5. 24
      app/Http/Controllers/TypePetiController.php
  6. 57
      app/Http/Controllers/WarehouseController.php
  7. 46
      app/Imports/CustomerImport.php
  8. 46
      app/Imports/KondisiPetiImport.php
  9. 147
      app/Imports/PetiImport.php
  10. 46
      app/Imports/TipePetiImport.php
  11. 47
      app/Imports/WarehouseImport.php
  12. 139
      resources/views/dashboard/Master_Data/Manajemen_Peti/Peti/index.blade.php
  13. 71
      resources/views/dashboard/Master_Data/Report/Pattern_lot_peti/index.blade.php
  14. 1
      resources/views/dashboard/Master_Data/Warehouse/index.blade.php
  15. 6
      resources/views/layouts/components/alert-prompt.blade.php

25
app/Http/Controllers/CustomerController.php

@ -113,7 +113,28 @@ class CustomerController extends Controller
public function importCustomer(Request $request)
{
Excel::import(new CustomerImport, request()->file('file'));
return redirect()->route('dashboard.customer.index')->with('success', 'Data customer berhasil Di Import');
$import = new CustomerImport;
Excel::import($import, request()->file('file'));
// Cek apakah ada data yang berhasil diimpor
if ($import->getRowCount() > 0) {
return redirect()->route('dashboard.customer.index')->with('success', 'Data Customer berhasil diimport');
} else {
$errors = $import->getErrors();
if ($errors) {
foreach ($errors as $error) {
foreach ($error->all() as $message) {
// Tampilkan pesan kesalahan untuk setiap baris
// Simpan pesan flash dengan kategori 'error'
session()->flash('error', $message);
}
}
}
// Redirect back with import data and error message
return redirect()->back()->with('import', $import)->with('error', 'Data Import Customer gagal di import.');
}
// return redirect()->route('dashboard.customer.index')->with('success', 'Data customer berhasil Di Import');
}
}

24
app/Http/Controllers/KondisiPetiController.php

@ -69,7 +69,27 @@ class KondisiPetiController extends Controller
public function importKondisiPeti(Request $request)
{
Excel::import(new KondisiPetiImport, request()->file('file'));
return redirect()->route('dashboard.kondisipeti.index')->with('success', 'Data kondisi peti berhasil di import');
$import = new KondisiPetiImport;
Excel::import($import, request()->file('file'));
// Cek apakah ada data yang berhasil diimpor
if ($import->getRowCount() > 0) {
return redirect()->route('dashboard.kondisipeti.index')->with('success', 'Data Kondisi Peti berhasil diimport');
} else {
$errors = $import->getErrors();
if ($errors) {
foreach ($errors as $error) {
foreach ($error->all() as $message) {
// Tampilkan pesan kesalahan untuk setiap baris
// Simpan pesan flash dengan kategori 'error'
session()->flash('error', $message);
}
}
}
// Redirect back with import data and error message
return redirect()->back()->with('import', $import)->with('error', 'Data Import Kondisi Peti gagal di import.');
}
}
}

107
app/Http/Controllers/PetiController.php

@ -24,81 +24,60 @@ class PetiController extends Controller
/**
* Display a listing of the resource.
*/
// public function index()
// {
// $data = [
// // 'peti' => Peti::orderBy('created_at', 'desc')->get(),
// 'peti' => Peti::orderBy('created_at', 'desc')->get(),
// 'kondisiPeti' => Kondisi_Peti::all(),
// 'active' => 'menu-peti',
// ];
// return view('dashboard.Master_Data.Manajemen_Peti.Peti.index', $data);
// }
// public function index()
// {
// // $perPage = 10; // Jumlah data per halaman, sesuaikan dengan kebutuhan Anda
// // $peti = Peti::orderBy('created_at', 'desc')->paginate($perPage);
// $peti = Peti::orderBy('created_at', 'desc')->get();
// $kondisiPeti = Kondisi_Peti::all();
// $data = [
// 'peti' => $peti,
// 'kondisiPeti' => $kondisiPeti,
// 'active' => 'menu-peti',
// ];
// return view('dashboard.Master_Data.Manajemen_Peti.Peti.index', $data);
// }
public function index(Request $request)
{
$perPage = $request->input('perPage', 5);
$query = Peti::select(['petis.*', 'customers.code_customer', 'customers.lot_no', 'type_petis.type', 'type_petis.size_peti', 'm_warehouses.name as warehouse_name'])
->join('customers', 'customers.id', '=', 'petis.customer_id')
->join('type_petis', 'type_petis.id', '=', 'petis.tipe_peti_id')
->join('m_warehouses', 'm_warehouses.id', '=', 'petis.warehouse_id')
->join('kondisi_petis', 'kondisipeti_id', '=', 'petis.kondisipeti_id')
->orderBy('petis.created_at', 'desc');
$query = Peti::with(['customer', 'warehouse', 'tipe_peti', 'kondisipeti', 'transfer', 'assetStatuses'])
->orderBy('created_at', 'desc');
// Tambahkan logika pencarian
$search = $request->input('search') ?? '';
// Tambahkan logika pencarian
$search = $request->input('search') ?? '';
if ($search) {
$query->where(function ($q) use ($search) {
$q->where('petis.fix_lot', 'like', "%$search%")
->orWhere('petis.created_by', 'like', "%$search%")
->orWhere('customers.name', 'like', "%$search%")
->orWhere('m_warehouses.name', 'like', "%$search%")
->orWhere('customers.code_customer', 'like', "%$search%")
->orWhere('type_petis.type', 'like', "%$search%")
->orWhere('type_petis.size_peti', 'like', "%$search%")
->orWhere('customers.lot_no', 'like', "%$search%")
->orWhere('kondisi_petis.nama_kondisi', 'like', "%$search%")
->orWhere('petis.packing_no', 'like', "%$search%")
->orWhere('petis.status', 'like', "%$search%");
$q->where('fix_lot', 'like', "%$search%")
->orWhere('created_by', 'like', "%$search%")
->orWhereHas('customer', function ($customerQuery) use ($search) {
$customerQuery->where('name', 'like', "%$search%")
->orWhere('code_customer', 'like', "%$search%")
->orWhere('lot_no', 'like', "%$search%");
})
->orWhereHas('warehouse', function ($warehouseQuery) use ($search) {
$warehouseQuery->where('name', 'like', "%$search%");
})
->orWhereHas('tipe_peti', function ($tipePetiQuery) use ($search) {
$tipePetiQuery->where('type', 'like', "%$search%")
->orWhere('size_peti', 'like', "%$search%");
})
->orWhereHas('kondisipeti', function ($kondisiPetiQuery) use ($search) {
$kondisiPetiQuery->where('nama_kondisi', 'like', "%$search%");
})
->orWhere('packing_no', 'like', "%$search%")
->orWhere('status', 'like', "%$search%");
});
}
if ($perPage == 'Semua') {
$chunkSize = 100;
$stores = new Collection();
$petis = new Collection();
$currentPage = 1;
$query->chunk($chunkSize, function ($storesChunk) use ($stores, &$currentPage) {
foreach ($storesChunk as $store) {
$store->setAttribute('i', ($currentPage - 1) * $storesChunk->perPage() + 1);
$stores->push($store);
$query->chunk($chunkSize, function ($petiChunk) use ($petis, &$currentPage) {
foreach ($petiChunk as $peti) {
$peti->setAttribute('i', ($currentPage - 1) * $petiChunk->perPage() + 1);
$petis->push($peti);
$currentPage++;
}
});
} else {
$stores = $query->paginate($perPage);
$petis = $query->paginate($perPage);
}
$data = [
// 'peti' => Peti::orderBy('created_at', 'desc')->paginate(10),
'peti' => $stores,
'peti' => $petis,
'kondisiPeti' => Kondisi_Peti::all(),
'i' => ($stores->currentPage() - 1) * $stores->perPage() + 1,
'i' => ($petis->currentPage() - 1) * $petis->perPage() + 1,
'search' => $search,
'active' => 'menu-peti',
];
@ -345,7 +324,27 @@ class PetiController extends Controller
public function importPeti(Request $request)
{
Excel::import(new PetiImport, request()->file('file'));
return redirect()->route('dashboard.peti.index')->with('success', 'Data peti berhasil di import');
$import = new PetiImport;
Excel::import($import, request()->file('file'));
// Cek apakah ada data yang berhasil diimpor
if ($import->getRowCount() > 0) {
return redirect()->route('dashboard.peti.index')->with('success', 'Data Peti berhasil diimport');
} else {
$errors = $import->getErrors();
if ($errors) {
foreach ($errors as $error) {
foreach ($error->all() as $message) {
// Tampilkan pesan kesalahan untuk setiap baris
// Simpan pesan flash dengan kategori 'error'
session()->flash('error', $message);
}
}
}
// Redirect back with import data and error message
return redirect()->back()->with('import', $import)->with('error', 'Data Import Peti gagal di import.');
}
}
}

63
app/Http/Controllers/Report/PetternLotPetiController.php

@ -5,16 +5,75 @@ namespace App\Http\Controllers\Report;
use App\Models\Peti;
use App\Models\asset_status;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\PetternLotPetiExport;
class PetternLotPetiController extends Controller
{
public function index()
// public function index()
// {
// $data = [
// 'peti' => Peti::withTrashed()->get(),
// 'active' => 'menu-Pettern_Lot_Peti'
// ];
// return view('dashboard.Master_Data.Report.Pattern_lot_peti.index', $data);
// }
public function index(Request $request)
{
$perPage = $request->input('perPage', 5);
$query = Peti::with(['customer', 'warehouse', 'tipe_peti', 'kondisipeti', 'transfer', 'assetStatuses'])
->orderBy('created_at', 'desc');
// Tambahkan logika pencarian
$search = $request->input('search') ?? '';
// Tambahkan logika pencarian
$search = $request->input('search') ?? '';
if ($search) {
$query->where(function ($q) use ($search) {
$q->where('fix_lot', 'like', "%$search%")
->orWhere('created_by', 'like', "%$search%")
->orWhereHas('customer', function ($customerQuery) use ($search) {
$customerQuery->where('name', 'like', "%$search%")
->orWhere('code_customer', 'like', "%$search%")
->orWhere('lot_no', 'like', "%$search%");
})
->orWhereHas('warehouse', function ($warehouseQuery) use ($search) {
$warehouseQuery->where('name', 'like', "%$search%");
})
->orWhereHas('tipe_peti', function ($tipePetiQuery) use ($search) {
$tipePetiQuery->where('type', 'like', "%$search%")
->orWhere('size_peti', 'like', "%$search%");
})
->orWhereHas('kondisipeti', function ($kondisiPetiQuery) use ($search) {
$kondisiPetiQuery->where('nama_kondisi', 'like', "%$search%");
})
->orWhere('packing_no', 'like', "%$search%")
->orWhere('status', 'like', "%$search%");
});
}
if ($perPage == 'Semua') {
$chunkSize = 100;
$petis = new Collection();
$currentPage = 1;
$query->chunk($chunkSize, function ($petiChunk) use ($petis, &$currentPage) {
foreach ($petiChunk as $peti) {
$peti->setAttribute('i', ($currentPage - 1) * $petiChunk->perPage() + 1);
$petis->push($peti);
$currentPage++;
}
});
} else {
$petis = $query->paginate($perPage);
}
$data = [
'peti' => Peti::withTrashed()->get(),
'peti' => $petis,
'i' => ($petis->currentPage() - 1) * $petis->perPage() + 1,
'search' => $search,
'active' => 'menu-Pettern_Lot_Peti'
];
return view('dashboard.Master_Data.Report.Pattern_lot_peti.index', $data);

24
app/Http/Controllers/TypePetiController.php

@ -113,7 +113,27 @@ class TypePetiController extends Controller
public function importTipePeti(Request $request)
{
Excel::import(new TipePetiImport, request()->file('file'));
return redirect()->route('dashboard.typepeti.index')->with('success', 'Data tipe peti berhasil di import');
$import = new TipePetiImport;
Excel::import($import, request()->file('file'));
// Cek apakah ada data yang berhasil diimpor
if ($import->getRowCount() > 0) {
return redirect()->route('dashboard.typepeti.index')->with('success', 'Data Tipe Peti berhasil diimport');
} else {
$errors = $import->getErrors();
if ($errors) {
foreach ($errors as $error) {
foreach ($error->all() as $message) {
// Tampilkan pesan kesalahan untuk setiap baris
// Simpan pesan flash dengan kategori 'error'
session()->flash('error', $message);
}
}
}
// Redirect back with import data and error message
return redirect()->back()->with('import', $import)->with('error', 'Data Import Tipe Peti gagal di import.');
}
}
}

57
app/Http/Controllers/WarehouseController.php

@ -4,11 +4,14 @@ namespace App\Http\Controllers;
use App\Models\m_warehouse;
use Illuminate\Http\Request;
use App\Imports\WarehouseImport;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Session;
use App\Http\Requests\ValidasiCreateWarehouse;
use App\Http\Requests\ValidasiUpdateWarehouse;
use App\Imports\WarehouseImport;
use Maatwebsite\Excel\Exceptions\NoTypeDetectedException;
use Illuminate\Support\Facades\Log;
class WarehouseController extends Controller
{
@ -26,10 +29,10 @@ class WarehouseController extends Controller
/**
* Show the form for creating a new resource.
*/
public function create()
{
// return view('dashboard.Master_Data.Warehouse.create');
}
// public function create()
// {
// // return view('dashboard.Master_Data.Warehouse.create');
// }
/**
* Store a newly created resource in storage.
@ -54,20 +57,20 @@ class WarehouseController extends Controller
/**
* Display the specified resource.
*/
public function show($id)
{
// dd('oke');
// return view('dashboard.Master_Data.Warehouse.show');
}
// public function show($id)
// {
// // dd('oke');
// // return view('dashboard.Master_Data.Warehouse.show');
// }
/**
* Show the form for editing the specified resource.
*/
public function edit()
{
// dd('oke');
// return view('dashboard.Master_Data.Warehouse.edit');
}
// public function edit()
// {
// // dd('oke');
// // return view('dashboard.Master_Data.Warehouse.edit');
// }
/**
* Update the specified resource in storage.
@ -104,7 +107,27 @@ class WarehouseController extends Controller
public function importWarehouse(Request $request)
{
Excel::import(new WarehouseImport, request()->file('file'));
return redirect()->route('dashboard.warehouse.index')->with('success', 'Data Warehouse berhasil diimport');
$import = new WarehouseImport;
Excel::import($import, request()->file('file'));
// Cek apakah ada data yang berhasil diimpor
if ($import->getRowCount() > 0) {
return redirect()->route('dashboard.warehouse.index')->with('success', 'Data Warehouse berhasil diimport');
} else {
$errors = $import->getErrors();
if ($errors) {
foreach ($errors as $error) {
foreach ($error->all() as $message) {
// Tampilkan pesan kesalahan untuk setiap baris
// Simpan pesan flash dengan kategori 'error'
session()->flash('error', $message);
}
}
}
// Redirect back with import data and error message
return redirect()->back()->with('import', $import)->with('error', 'Data Import Warehouse gagal di import.');
}
}
}

46
app/Imports/CustomerImport.php

@ -3,9 +3,11 @@
namespace App\Imports;
use App\Models\Customer;
use Illuminate\Support\MessageBag;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Events\AfterImport;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class CustomerImport implements ToModel, WithHeadingRow
@ -15,11 +17,27 @@ class CustomerImport implements ToModel, WithHeadingRow
*
* @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
$existingCustomer = Customer::where('name', $row['name'])->first();
if ($existingCustomer) {
// Jika nama warehouse sudah ada, tambahkan pesan kesalahan ke dalam array $errors
$this->errors[] = new MessageBag(['Row ' . $this->rowCount => 'Data Customer sudah ada dalam database.']);
return null; // Abaikan data yang sudah ada
}
// Increment rowCount setiap kali ada data yang diimpor
$this->rowCount++;
return new Customer([
'name' => $row['name'],
'code_customer' => $row['code_customer'],
@ -29,4 +47,32 @@ class CustomerImport implements ToModel, WithHeadingRow
'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;
}
}

46
app/Imports/KondisiPetiImport.php

@ -4,8 +4,10 @@ namespace App\Imports;
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;
@ -16,15 +18,59 @@ class KondisiPetiImport implements ToModel, WithHeadingRow
*
* @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
$existingKondisiPeti = Kondisi_Peti::where('nama_kondisi', $row['nama_kondisi'])->first();
if ($existingKondisiPeti) {
// Jika nama warehouse sudah ada, tambahkan pesan kesalahan ke dalam array $errors
$this->errors[] = new MessageBag(['Row ' . $this->rowCount => 'Data Kondisi Peti sudah ada dalam database.']);
return null; // Abaikan data yang sudah ada
}
// Increment rowCount setiap kali ada data yang diimpor
$this->rowCount++;
return new Kondisi_Peti([
'nama_kondisi' => $row['nama_kondisi'],
'deskripsi_kondisi' => $row['deskripsi_kondisi'],
'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;
}
}

147
app/Imports/PetiImport.php

@ -3,35 +3,162 @@
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
{
/**
* @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();
$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' => $row['tipe_peti_id'],
'tipe_peti_id' => $tipePeti->id,
'warna' => $row['warna'],
'customer_id' => $row['customer_id'],
'warehouse_id' => $row['warehouse_id'],
'customer_id' => $customer->id,
'warehouse_id' => $warehouse->id,
'date_pembuatan' => now(),
'kondisipeti_id' => $row['kondisipeti_id'],
'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;
}
}

46
app/Imports/TipePetiImport.php

@ -4,8 +4,10 @@ namespace App\Imports;
use App\Models\Type_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 App\Models\Type_peti as ModelsType_peti;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
@ -17,11 +19,27 @@ class TipePetiImport implements ToModel, WithHeadingRow
*
* @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
$existingTipePeti = Type_peti::where('type', $row['type'])->first();
if ($existingTipePeti) {
// Jika nama warehouse sudah ada, tambahkan pesan kesalahan ke dalam array $errors
$this->errors[] = new MessageBag(['Row ' . $this->rowCount => 'Data Tipe peti sudah ada dalam database.']);
return null; // Abaikan data yang sudah ada
}
// Increment rowCount setiap kali ada data yang diimpor
$this->rowCount++;
return new Type_peti([
'type' => $row['type'],
'size_peti' => $row['size_peti'],
@ -29,4 +47,32 @@ class TipePetiImport implements ToModel, WithHeadingRow
'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;
}
}

47
app/Imports/WarehouseImport.php

@ -3,9 +3,12 @@
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;
@ -16,11 +19,27 @@ class WarehouseImport implements ToModel, WithHeadingRow
*
* @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
$existingWarehouse = m_warehouse::where('name', $row['name'])->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' => $row['name'],
'description' => $row['description'],
@ -28,4 +47,32 @@ class WarehouseImport implements ToModel, WithHeadingRow
'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;
}
}

139
resources/views/dashboard/Master_Data/Manajemen_Peti/Peti/index.blade.php

@ -19,7 +19,7 @@
<div class="col-7">
<h5 class="m-0 font-weight-bold text-primary mt-2">Data Peti</h5>
</div>
<div class="col-5 d-flex">
<div class="col-5 d-flex justify-content-end">
<a href="{{ route('dashboard.peti.create') }}" class="btn btn-success btn-icon-split ml-4">
<span class="text">Tambah Peti</span>
</a>
@ -33,7 +33,7 @@
</div>
<a href="#" class="btn btn-info btn-icon-split" data-toggle="modal"
data-target="#importDataModal">
<span class="text">Import Customer</span>
<span class="text">Import Peti</span>
</a>
</div>
</div>
@ -96,90 +96,40 @@
</thead>
<tbody>
@forelse ($peti as $data_peti)
@if ($search)
@if (stripos($data_peti->fix_lot, $search) !== false ||
stripos($data_peti->created_by, $search) !== false ||
stripos($data_peti->customer->name, $search) !== false ||
stripos($data_peti->warehouse->name, $search) !== false ||
stripos($data_peti->customer->code_customer, $search) !== false ||
stripos($data_peti->tipe_peti->type, $search) !== false ||
stripos($data_peti->tipe_peti->size_peti, $search) !== false ||
stripos($data_peti->customer->lot_no, $search) !== false ||
stripos($data_peti->kondisipeti->nama_kondisi, $search) !== false ||
stripos($data_peti->packing_no, $search) !== false ||
stripos($data_peti->status, $search) !== false)
<!-- Tampilkan data pencarian -->
<tr>
<td>{{ $i++ }}</td>
<td><input type="checkbox" class="checkbox" value="{{ $data_peti->id }}">
</td>
<td>{{ $data_peti->fix_lot }}</td>
<td>{{ $data_peti->created_by }}</td>
<td>{{ $data_peti->customer->name }}</td>
<td>{{ $data_peti->warehouse->name }}</td>
<td>{{ $data_peti->customer->code_customer }}</td>
<td>{{ $data_peti->tipe_peti->type }}</td>
<td>{{ $data_peti->tipe_peti->size_peti }}</td>
<td>{{ $data_peti->customer->lot_no }}</td>
<td>{{ $data_peti->kondisipeti->nama_kondisi }}</td>
<td class="text-right">{{ $data_peti->packing_no }}</td>
<td>{{ $data_peti->status }}</td>
<td class="text-center">
<a href="{{ route('dashboard.peti.show', [$data_peti->id]) }}">
<i class="fa fa-eye mr-2" style="font-size: 20px"></i>
</a>
<a href="{{ route('dashboard.peti.edit', [$data_peti->id]) }}">
<i class="fa fa-edit mr-2" style="font-size: 20px"></i>
</a>
<form action="{{ route('dashboard.peti.destroy', $data_peti->id) }}"
method="POST" style="display: inline;">
@csrf
@method('DELETE')
<button type="submit"
onclick="return confirm('Apakah Anda yakin ingin menghapus data ini?')"
style="border: none; background: none; cursor: pointer;">
<i class="fa fa-trash text-danger" style="font-size: 20px"></i>
</button>
</form>
</td>
</tr>
@endif
@else
<!-- Tampilkan semua data jika tidak ada pencarian -->
<tr>
<td>{{ $i++ }}</td>
<td><input type="checkbox" class="checkbox" value="{{ $data_peti->id }}"></td>
<td>{{ $data_peti->fix_lot }}</td>
<td>{{ $data_peti->created_by }}</td>
<td>{{ $data_peti->customer->name }}</td>
<td>{{ $data_peti->warehouse->name }}</td>
<td>{{ $data_peti->customer->code_customer }}</td>
<td>{{ $data_peti->tipe_peti->type }}</td>
<td>{{ $data_peti->tipe_peti->size_peti }}</td>
<td>{{ $data_peti->customer->lot_no }}</td>
<td>{{ $data_peti->kondisipeti->nama_kondisi }}</td>
<td class="text-right">{{ $data_peti->packing_no }}</td>
<td>{{ $data_peti->status }}</td>
<td class="text-center">
<a href="{{ route('dashboard.peti.show', [$data_peti->id]) }}">
<i class="fa fa-eye mr-2" style="font-size: 20px"></i>
</a>
<a href="{{ route('dashboard.peti.edit', [$data_peti->id]) }}">
<i class="fa fa-edit mr-2" style="font-size: 20px"></i>
</a>
<form action="{{ route('dashboard.peti.destroy', $data_peti->id) }}"
method="POST" style="display: inline;">
@csrf
@method('DELETE')
<button type="submit"
onclick="return confirm('Apakah Anda yakin ingin menghapus data ini?')"
style="border: none; background: none; cursor: pointer;">
<i class="fa fa-trash text-danger" style="font-size: 20px"></i>
</button>
</form>
</td>
</tr>
@endif
<tr>
<td>{{ $i++ }}</td>
<td><input type="checkbox" class="checkbox" value="{{ $data_peti->id }}">
</td>
<td>{{ $data_peti->fix_lot }}</td>
<td>{{ $data_peti->created_by }}</td>
<td>{{ $data_peti->customer->name }}</td>
<td>{{ $data_peti->warehouse->name }}</td>
<td>{{ $data_peti->customer->code_customer }}</td>
<td>{{ $data_peti->tipe_peti->type }}</td>
<td>{{ $data_peti->tipe_peti->size_peti }}</td>
<td>{{ $data_peti->customer->lot_no }}</td>
<td>{{ $data_peti->kondisipeti->nama_kondisi }}</td>
<td class="text-right">{{ $data_peti->packing_no }}</td>
<td>{{ $data_peti->status }}</td>
<td class="text-center">
<a href="{{ route('dashboard.peti.show', [$data_peti->id]) }}">
<i class="fa fa-eye mr-2" style="font-size: 20px"></i>
</a>
<a href="{{ route('dashboard.peti.edit', [$data_peti->id]) }}">
<i class="fa fa-edit mr-2" style="font-size: 20px"></i>
</a>
<form action="{{ route('dashboard.peti.destroy', $data_peti->id) }}" method="POST"
style="display: inline;">
@csrf
@method('DELETE')
<button type="submit"
onclick="return confirm('Apakah Anda yakin ingin menghapus data ini?')"
style="border: none; background: none; cursor: pointer;">
<i class="fa fa-trash text-danger" style="font-size: 20px"></i>
</button>
</form>
</td>
</tr>
@empty
<tr>
<td colspan="14" class="text-center">Data Kosong</td>
@ -189,28 +139,29 @@
</table>
</div>
<div class="row mt-3">
<div class="col-md-6">
<div class="col-4">
<!-- Tampilkan jumlah data yang ditampilkan -->
@if (!$peti->isEmpty())
<p class="mb-0">Showing {{ $peti->firstItem() }} to {{ $peti->lastItem() }} of
<p class="d-inline-block">Showing {{ $peti->firstItem() }} to
{{ $peti->lastItem() }} of
{{ $peti->total() }} entries</p>
@endif
</div>
<div class="col-md-6 d-flex justify-content-end">
<div class="col-8 d-flex justify-content-end">
@if ($peti->total() > $peti->perPage())
<nav aria-label="Page navigation">
<ul class="pagination justify-content-end mb-0">
<ul class="pagination justify-content-center">
<li class="page-item {{ $peti->onFirstPage() ? 'disabled' : '' }}">
<a class="page-link"
href="{{ $peti->appends(['perPage' => Request::get('perPage'), 'search' => $search])->url(1) }}"
href="{{ $peti->appends(['perPage' => Request::get('perPage')])->url(1) }}"
aria-label="First">
<span aria-hidden="true">First</span>
</a>
</li>
{{ $peti->appends(['perPage' => Request::get('perPage'), 'search' => $search])->links() }}
{{ $peti->appends(['perPage' => Request::get('perPage')])->links() }}
<li class="page-item {{ $peti->hasMorePages() ? '' : 'disabled' }}">
<a class="page-link"
href="{{ $peti->appends(['perPage' => Request::get('perPage'), 'search' => $search])->url($peti->lastPage()) }}"
href="{{ $peti->appends(['perPage' => Request::get('perPage')])->url($peti->lastPage()) }}"
aria-label="Last">
<span aria-hidden="true">Last</span>
</a>
@ -220,8 +171,6 @@
@endif
</div>
</div>
</div>
</div>

71
resources/views/dashboard/Master_Data/Report/Pattern_lot_peti/index.blade.php

@ -25,12 +25,46 @@
</div>
</div>
<div class="card-body">
<div class="row mb-3">
<div class="col-6">
<!-- Fitur page -->
<form method="GET" action="{{ route('dashboard.Pettern_Lot_Peti.index') }}">
<label for="perPage">Tampilkan:</label>
<select id="perPage" name="perPage" class="form-select" onchange="this.form.submit()">
<option value="5" {{ request('perPage', 5) == '5' ? 'selected' : '' }}>5</option>
<option value="10" {{ request('perPage', 5) == '10' ? 'selected' : '' }}>10</option>
<option value="25" {{ request('perPage', 5) == '25' ? 'selected' : '' }}>25</option>
<option value="50" {{ request('perPage', 5) == '50' ? 'selected' : '' }}>50</option>
<option value="100" {{ request('perPage', 5) == '100' ? 'selected' : '' }}>100</option>
<option value="500" {{ request('perPage', 5) == '500' ? 'selected' : '' }}>500</option>
<option value="1000" {{ request('perPage', 5) == '1000' ? 'selected' : '' }}>1000</option>
<option value="2500" {{ request('perPage', 5) == '2500' ? 'selected' : '' }}>2500
</option>
<option value="5000" {{ request('perPage', 5) == '5000' ? 'selected' : '' }}>5000
</option>
<option value="{{ $peti->total() }}"
{{ request('perPage', 5) == $peti->total() ? 'selected' : '' }}>Semua</option>
</select>
<input type="hidden" name="search" value="{{ $search }}">
<input type="hidden" name="page" value="{{ request('page', 1) }}">
</form>
</div>
<div class="col-6 d-flex justify-content-end mb-3">
<!-- Fitur search -->
<form method="GET" action="{{ route('dashboard.Pettern_Lot_Peti.index') }}" class="form-inline">
<input type="text" name="search" class="form-control mr-2" placeholder="Cari..."
value="{{ $search }}">
<input type="hidden" name="page" value="1">
<input type="hidden" name="perPage" value="{{ request('perPage', 5) }}">
<button type="submit" class="btn btn-primary">Cari</button>
</form>
</div>
</div>
<div class="table-responsive">
<table class="table table-bordered" id="tablebarang" width="100%" cellspacing="0">
<table class="table table-bordered" width="100%" cellspacing="0">
<thead>
<tr>
<th>No</th>
{{-- <th>User</th> --}}
<th>FIX LOT</th>
<th>Customer</th>
<th>WH</th>
@ -68,6 +102,39 @@
</tbody>
</table>
</div>
<div class="row mt-3">
<div class="col-4">
<!-- Tampilkan jumlah data yang ditampilkan -->
@if (!$peti->isEmpty())
<p class="d-inline-block">Showing {{ $peti->firstItem() }} to
{{ $peti->lastItem() }} of
{{ $peti->total() }} entries</p>
@endif
</div>
<div class="col-8 d-flex justify-content-end">
@if ($peti->total() > $peti->perPage())
<nav aria-label="Page navigation">
<ul class="pagination justify-content-center">
<li class="page-item {{ $peti->onFirstPage() ? 'disabled' : '' }}">
<a class="page-link"
href="{{ $peti->appends(['perPage' => Request::get('perPage')])->url(1) }}"
aria-label="First">
<span aria-hidden="true">First</span>
</a>
</li>
{{ $peti->appends(['perPage' => Request::get('perPage')])->links() }}
<li class="page-item {{ $peti->hasMorePages() ? '' : 'disabled' }}">
<a class="page-link"
href="{{ $peti->appends(['perPage' => Request::get('perPage')])->url($peti->lastPage()) }}"
aria-label="Last">
<span aria-hidden="true">Last</span>
</a>
</li>
</ul>
</nav>
@endif
</div>
</div>
</div>
</div>
@endsection

1
resources/views/dashboard/Master_Data/Warehouse/index.blade.php

@ -3,6 +3,7 @@
@section('content')
@include('layouts.components.alert-prompt')
@if (auth()->user()->role_id == 1)
<div class="card shadow mb-4">
<div class="card-header py-3">

6
resources/views/layouts/components/alert-prompt.blade.php

@ -14,6 +14,12 @@
</div>
@endif
@if (Session::has('error'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<strong>{{ Session::get('error') }}</strong>
</div>
@endif
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {

Loading…
Cancel
Save