Tutorial Laravel kali ini akan menjelaskan bagaimana cara menampilkan pesan error saat melakukan import dengan menggunakan Laravel Excel. Pada saat user melakukan import file excel, program akan membaca file tersebut baris per baris dan kemudian akan menampilkan error pada user jika terdapat baris data yang tidak sesuai. Tujuannya adalah untuk memberitahu user kesalahan data terdapat pada baris berapa dan jenis kesalahan apa yang terdapat pada baris tersebut.
Namun sebelumnya jika anda belum tahu bagaimana cara melakukan import data dengan menggunakan Laravel Excel sebaiknya anda membaca terlebih dahulu artikel sebelumnya yang sudah saya tulis.
Baca juga:
Tutorial Laravel 5.5 - Melakukan Import Data ke Excel dengan Laravel Excel
#PENGECEKAN PADA FILE IMPORT
Berikut ini adalah sebagian contoh bagimana cara penggunaannya :
private $error = [];
public function collection(Collection $rows)
{
$i = 1;
foreach ($rows as $row)
{
$cek_campaign = CampaignH::where('kode_campaign', trim($row[0]))->where('active' , 1)->count();
$cek_user = UserAvex::where('reldag', trim($row[1]))->count();
$cek = CustomerOmzet::where('kode_campaign', trim($row[0]))->where('kode_customer', trim($row[1]))->where('active',1)->count();
if ($cek_campaign == 0){
$text = "Baris ".$i." : Kode Campaign tidak ditemukan";
array_push($this->error,$text);
} else
if ($cek_user == 0){
$text = "Baris ".$i." : Kode Customer tidak ditemukan";
array_push($this->error,$text);
} else
if ($cek > 0){
//kembar
$text = "Baris ".$i." : Data sudah ada";
array_push($this->error,$text);
} else
if ($row[3] < $row[2]){
//periode akhir < periode awal
$text = "Baris ".$i." : Tanggal periode akhir lebih kecil dari periode awal";
array_push($this->error,$text);
} else {
$data = new CustomerOmzet;
$data->kode_campaign = trim($row[0]);
$data->kode_customer = trim($row[1]);
$data->periode_awal = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[2]);
$data->periode_akhir = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[3]);
$data->omzet_tepat_waktu = $row[4] / 1;
$data->disc_pembelian = $row[5] / 1;
$data->disc_penjualan = $row[6] / 1;
$data->omzet_netto = $row[7] / 1;
$data->poin = $row[8] / 1;
$data->active = 1;
$data->user_modified = Session::get('userinfo')['uname'];
$data->save();
}
$i++;
}
}
public function getError(): array
{
return $this->error;
}
Pada contoh program di atas saya menggunakan variabel error untuk menampung semua error yang muncul. Kemudian bagaimana cara untuk menampung errror yang muncu terdapat pada potongan kode berikut :
$text = "Baris ".$i." : Kode Campaign tidak ditemukan";
array_push($this->error,$text);
Pada saat dilakukan pengecekan pada program dan ternyata baris yang dibaca tidak sesuai maka akan memunculkan error yang ditampung pada variabel $text. Variabel $i digunakan untuk menampilkan baris yang dibaca dan kemudian error tersebut akan dimasukkan ke dalam variabel $error dengan menggunakan perintah array_push dikarenakan variabel $error ini bertipe array.
Setelah semua baris sudah selesai dibaca dan semua error sudah ditampung cara berikutnya adalah mengembalikan variabel error tersebut sebagai nilai kembalian dengan kode berikut :
public function getError(): array
{
return $this->error;
}
#PEMANGGILAN PADA FILE CONTROLLER
Setelah selesai membuat kode untuk melakukan import sekarang adalah contoh bagaimana kode untuk memanggil file import tersebut beserta dengan error yang dikembalikan. Berikut ini adalah contoh kodenya :
if ($request->hasFile('upload_file')) {
$file = $request->file('upload_file');
$import = new OmzetImport;
Excel::import($import, $file);
$error = $import->getError();
return Redirect::to('/backend/master-omzet/')->with('success', "Data saved successfully")->with('mode', 'success')->with('error', $error);
Baris kode untuk mendapatkan error adalah kode berikut :
$error = $import->getError();
Dan kemudian digunakan methid with pada saat melakukan return untuk mengirimkan nilai variabel error tersebut pada view.
#MENAMPILKAN ERROR DI VIEW
Berikut ini adalah contoh kode untuk menampilkan error setelah proses upload file tadi :
@if (Session::has('error'))
<?php
if (!empty(Session::get('error'))) :
?>
<div class="row">
<div class="col-xs-12 alert alert-danger alert-dismissible" role="alert">
<?php
foreach (Session::get('error') as $error):
echo $error."<br/>";
endforeach;
?>
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
</div>
</div>
<?php
endif;
?>
@endif
Error tersebut akan ditampung pada session. Jadi untuk menampilkannya adalah dengan melakukan pengecekan pada session error apakah ada isinya atau tidak. Jika ada isinya maka digunakan perintah foreach untuk mencetak error tersebut per baris dikarenakan kita tadi menggunakan array untuk menampung error yang muncul.
Cara untuk menampilkan error ini dapat anda modifikasi sendiri. Pada contoh kode di atas, saya menggunakan bootstrap 3 sebagai tampilannya. Silahkan anda sesuaikan sendiri dengan framework yang anda gunakan untuk mendapatkan hasil yang anda inginkan.
Demikian penjelasan saya pada artikel Tutorial Laravel 6 - Menampilkan Pesan Error pada Laravel Excel. Segala pertanyaan dapat anda sampaikan pada kolom komentar di bawah. Saya tidak menjanjikan saya dapat menjawab semua pertanyaan yang ada dikarenakan kesibukan saya saat ini. Namun akan saya usahakan untuk menjawab semua pertanyaan anda jika ada. Terima kasih
Post a Comment
Post a Comment