menambahkan fitur export to excel di menu master ijin usaha

This commit is contained in:
rahmatrafli1 2024-09-18 17:16:29 +07:00
parent d5e13245d4
commit 8e73269f76
12 changed files with 189 additions and 42 deletions

View File

@ -0,0 +1,47 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\IjinUsaha;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class IjinUsahaExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return IjinUsaha::all();
}
public function map($row): array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings(): array
{
return [
'ID',
'Code',
'Name',
'Created At'
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'B' => NumberFormat::FORMAT_NUMBER,
'E' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\IjinUsahaExport;
use Modules\Lpj\Http\Requests\IjinUsahaRequest;
use Modules\Lpj\Models\IjinUsaha;
@ -164,4 +166,9 @@ class IjinUsahaController extends Controller
'data' => $data,
]);
}
public function export()
{
return Excel::download(new IjinUsahaExport, 'ijin_usaha.xlsx');
}
}

View File

@ -3,11 +3,13 @@
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Http\Requests\KJPPRequest;
use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\IjinUsaha;
use Modules\Lpj\Models\JenisAset;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\KJPP;
class KJPPController extends Controller
@ -28,7 +30,7 @@ class KJPPController extends Controller
{
$branch = Branch::all();
$ijin_usaha = IjinUsaha::all();
$jenis_aset = JenisAset::all();
$jenis_aset = JenisJaminan::all();
return view('lpj::kjpp.create', compact('branch', 'ijin_usaha', 'jenis_aset'));
}
@ -36,9 +38,22 @@ class KJPPController extends Controller
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
public function store(KJPPRequest $request)
{
//
$validate = $request->validated();
if ($validate) {
try {
KJPP::create($validate);
return redirect()
->route('basicdata.kjpp.index')
->with('success', 'Ijin Usaha created successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.kjpp.create')
->with('error', 'Failed to create ijin Usaha');
}
}
}
/**
@ -86,8 +101,9 @@ class KJPPController extends Controller
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor', 'LIKE', "%$search%");
$q->orWhere('nama_kjpp', 'LIKE', "%$search%");
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
$q->orWhere('jenis_kantor', 'LIKE', "%$search%");
});
}

View File

@ -0,0 +1,48 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class KJPPRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|not_regex:/^\d+$/|max:255',
'jenis_kantor' => 'required'
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|max:50|unique:kjpp,code,' . $this->id;
} else {
$rules['code'] = 'required|max:50|unique:kjpp,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function messages(): array
{
return [
'code.required' => 'Kode KJPP harus diisi!',
'code.max' => 'Kode KJPP maksimal 255 huruf!',
'code.unique' => 'Kode KJPP tidak boleh sama!',
'name.required' => 'Nama KJPP harus diisi!',
'name.not_regex' => 'Nama KJPP harus berupa huruf!',
'name.max' => 'Nama KJPP maksimal 255 huruf!',
'jenis_kantor.required' => 'Jenis Kantor harus diisi!'
];
}
}

View File

@ -13,4 +13,9 @@ class Branch extends Base
{
return $this->hasMany(Debiture::class, 'branch_id', 'id');
}
public function kjpp()
{
return $this->belongsTo(KJPP::class);
}
}

View File

@ -15,4 +15,10 @@ class IjinUsaha extends Model
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name'];
// relasi ke kjpp
public function kjpp()
{
return $this->belongsTo(KJPP::class);
}
}

View File

@ -1,9 +1,15 @@
<?php
namespace Modules\Lpj\Models;
namespace Modules\Lpj\Models;
class JenisJaminan extends Base
class JenisJaminan extends Base
{
protected $table = 'jenis_jaminan';
protected $fillable = ['code', 'name', 'slug', 'jenis_legalitas_jaminan_id'];
// relasi ke kjpp
public function kjpp()
{
protected $table = 'jenis_jaminan';
protected $fillable = ['code', 'name','slug','jenis_legalitas_jaminan_id'];
return $this->belongsTo(KJPP::class);
}
}

View File

@ -17,4 +17,22 @@ class KJPP extends Model
* The attributes that are mass assignable.
*/
protected $guarded = ['id'];
// relasi ke branch
public function branch()
{
return $this->hasOne(Branch::class, 'jenis_kantor');
}
// relasi ke jenis aset
public function jenis_aset()
{
return $this->hasMany(JenisJaminan::class, 'jenis_aset_id');
}
// relasi ke ijin usaha
public function ijin_usaha()
{
return $this->hasMany(IjinUsaha::class, 'ijin_usaha_id');
}
}

View File

@ -20,6 +20,8 @@
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="{{ route('basicdata.ijin_usaha.export') }}"> Export to Excel
</a>
<a class="btn btn-sm btn-primary" href="{{ route('basicdata.ijin_usaha.create') }}"> Tambah Ijin
Usaha
</a>

View File

@ -31,9 +31,9 @@
Nomor KJPP
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor') border-danger bg-danger-light @enderror" type="text"
name="nomor" value="{{ $kjpp->nomor ?? old('nomor') }}">
@error('nomor')
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text"
name="code" value="{{ $kjpp->code ?? old('code') }}">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
@ -43,37 +43,28 @@
Nama KJPP
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nama_kjpp') border-danger bg-danger-light @enderror" type="text"
name="nama_kjpp" value="{{ $kjpp->nama_kjpp ?? old('nama_kjpp') }}">
@error('nama_kjpp')
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text"
name="name" value="{{ $kjpp->name ?? old('name') }}">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kantor Cabang</label>
<label class="form-label max-w-56">Jenis Kantor / Cabang</label>
<div class="flex flex-wrap items-baseline w-full">
<select
class="input tomselect w-full @error('cabang_id') border-danger bg-danger-light @enderror select2"
name="cabang_id">
<option value="">Select Kantor Cabang</option>
<select class="input tomselect @error('jenis_kantor') border-danger bg-danger-light @enderror"
name="jenis_kantor">
<option value="">Select Jenis Kantor / Cabang</option>
@if (isset($branch))
@foreach ($branch as $branches)
<option value="{{ $branches->id }}">{{ $branches->name }}</option>
<option value="{{ $branches->id }}">
{{ $branches->name }}
</option>
@endforeach
@endif
</select>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Ijin Usaha
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_ijin_usaha') border-danger bg-danger-light @enderror"
type="text" name="nomor_ijin_usaha"
value="{{ $kjpp->nomor_ijin_usaha ?? old('nomor_ijin_usaha') }}">
@error('nomor_ijin_usaha')
@error('jenis_kantor')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>

View File

@ -36,16 +36,16 @@
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[250px]" data-datatable-column="nomor">
<span class="sort"> <span class="sort-label"> Nomor </span>
<th class="min-w-[250px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Nomor KJPP </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[250px]" data-datatable-column="nama_kjpp">
<th class="min-w-[250px]" data-datatable-column="name">
<span class="sort"> <span class="sort-label"> Nama KJPP </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px]" data-datatable-column="kota">
<span class="sort"> <span class="sort-label"> Kota </span>
<th class="min-w-[50px]" data-datatable-column="jenis_kantor">
<span class="sort"> <span class="sort-label"> Jenis Kantor / Cabang </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
@ -124,16 +124,16 @@
},
},
nomor: {
title: 'Nomor',
title: 'Nomor KJPP',
},
nama_kjpp: {
title: 'Nama KJPP',
},
kota: {
title: 'Kota',
jenis_kantor: {
title: 'Jenis Kantor / Cabang',
},
actions: {
title: 'Status',
title: 'Action',
render: (item, data) => {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-primary" href="basic-data/kjpp/${data.id}/show">

View File

@ -166,6 +166,7 @@ Route::middleware(['auth'])->group(function () {
Route::name('ijin_usaha.')->prefix('ijin_usaha')->group(function () {
Route::get('datatables', [IjinUsahaController::class, 'dataForDatatables'])
->name('datatables');
Route::get('export', [IjinUsahaController::class, 'export'])->name('export');
});
Route::resource('ijin_usaha', IjinUsahaController::class);