menambahkan fitur export to excel di menu master ijin usaha
This commit is contained in:
parent
d5e13245d4
commit
8e73269f76
47
app/Exports/IjinUsahaExport.php
Normal file
47
app/Exports/IjinUsahaExport.php
Normal 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
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use Modules\Lpj\Exports\IjinUsahaExport;
|
||||||
use Modules\Lpj\Http\Requests\IjinUsahaRequest;
|
use Modules\Lpj\Http\Requests\IjinUsahaRequest;
|
||||||
use Modules\Lpj\Models\IjinUsaha;
|
use Modules\Lpj\Models\IjinUsaha;
|
||||||
|
|
||||||
@ -164,4 +166,9 @@ class IjinUsahaController extends Controller
|
|||||||
'data' => $data,
|
'data' => $data,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function export()
|
||||||
|
{
|
||||||
|
return Excel::download(new IjinUsahaExport, 'ijin_usaha.xlsx');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,13 @@
|
|||||||
namespace Modules\Lpj\Http\Controllers;
|
namespace Modules\Lpj\Http\Controllers;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use Exception;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
use Modules\Lpj\Http\Requests\KJPPRequest;
|
||||||
use Modules\Lpj\Models\Branch;
|
use Modules\Lpj\Models\Branch;
|
||||||
use Modules\Lpj\Models\IjinUsaha;
|
use Modules\Lpj\Models\IjinUsaha;
|
||||||
use Modules\Lpj\Models\JenisAset;
|
use Modules\Lpj\Models\JenisJaminan;
|
||||||
use Modules\Lpj\Models\KJPP;
|
use Modules\Lpj\Models\KJPP;
|
||||||
|
|
||||||
class KJPPController extends Controller
|
class KJPPController extends Controller
|
||||||
@ -28,7 +30,7 @@ class KJPPController extends Controller
|
|||||||
{
|
{
|
||||||
$branch = Branch::all();
|
$branch = Branch::all();
|
||||||
$ijin_usaha = IjinUsaha::all();
|
$ijin_usaha = IjinUsaha::all();
|
||||||
$jenis_aset = JenisAset::all();
|
$jenis_aset = JenisJaminan::all();
|
||||||
|
|
||||||
return view('lpj::kjpp.create', compact('branch', 'ijin_usaha', 'jenis_aset'));
|
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.
|
* 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'))) {
|
if ($request->has('search') && !empty($request->get('search'))) {
|
||||||
$search = $request->get('search');
|
$search = $request->get('search');
|
||||||
$query->where(function ($q) use ($search) {
|
$query->where(function ($q) use ($search) {
|
||||||
$q->where('nomor', 'LIKE', "%$search%");
|
$q->where('code', 'LIKE', "%$search%");
|
||||||
$q->orWhere('nama_kjpp', 'LIKE', "%$search%");
|
$q->orWhere('name', 'LIKE', "%$search%");
|
||||||
|
$q->orWhere('jenis_kantor', 'LIKE', "%$search%");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
48
app/Http/Requests/KJPPRequest.php
Normal file
48
app/Http/Requests/KJPPRequest.php
Normal 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!'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -13,4 +13,9 @@ class Branch extends Base
|
|||||||
{
|
{
|
||||||
return $this->hasMany(Debiture::class, 'branch_id', 'id');
|
return $this->hasMany(Debiture::class, 'branch_id', 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function kjpp()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(KJPP::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,4 +15,10 @@ class IjinUsaha extends Model
|
|||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
*/
|
*/
|
||||||
protected $fillable = ['code', 'name'];
|
protected $fillable = ['code', 'name'];
|
||||||
|
|
||||||
|
// relasi ke kjpp
|
||||||
|
public function kjpp()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(KJPP::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
<?php
|
<?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';
|
return $this->belongsTo(KJPP::class);
|
||||||
protected $fillable = ['code', 'name','slug','jenis_legalitas_jaminan_id'];
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -17,4 +17,22 @@ class KJPP extends Model
|
|||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
*/
|
*/
|
||||||
protected $guarded = ['id'];
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-2.5">
|
<div class="flex flex-wrap gap-2.5">
|
||||||
<div class="h-[24px] border border-r-gray-200"></div>
|
<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
|
<a class="btn btn-sm btn-primary" href="{{ route('basicdata.ijin_usaha.create') }}"> Tambah Ijin
|
||||||
Usaha
|
Usaha
|
||||||
</a>
|
</a>
|
||||||
|
@ -31,9 +31,9 @@
|
|||||||
Nomor KJPP
|
Nomor KJPP
|
||||||
</label>
|
</label>
|
||||||
<div class="flex flex-wrap items-baseline w-full">
|
<div class="flex flex-wrap items-baseline w-full">
|
||||||
<input class="input @error('nomor') border-danger bg-danger-light @enderror" type="text"
|
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text"
|
||||||
name="nomor" value="{{ $kjpp->nomor ?? old('nomor') }}">
|
name="code" value="{{ $kjpp->code ?? old('code') }}">
|
||||||
@error('nomor')
|
@error('code')
|
||||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
@ -43,37 +43,28 @@
|
|||||||
Nama KJPP
|
Nama KJPP
|
||||||
</label>
|
</label>
|
||||||
<div class="flex flex-wrap items-baseline w-full">
|
<div class="flex flex-wrap items-baseline w-full">
|
||||||
<input class="input @error('nama_kjpp') border-danger bg-danger-light @enderror" type="text"
|
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text"
|
||||||
name="nama_kjpp" value="{{ $kjpp->nama_kjpp ?? old('nama_kjpp') }}">
|
name="name" value="{{ $kjpp->name ?? old('name') }}">
|
||||||
@error('nama_kjpp')
|
@error('name')
|
||||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
|
<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">
|
<div class="flex flex-wrap items-baseline w-full">
|
||||||
<select
|
<select class="input tomselect @error('jenis_kantor') border-danger bg-danger-light @enderror"
|
||||||
class="input tomselect w-full @error('cabang_id') border-danger bg-danger-light @enderror select2"
|
name="jenis_kantor">
|
||||||
name="cabang_id">
|
<option value="">Select Jenis Kantor / Cabang</option>
|
||||||
<option value="">Select Kantor Cabang</option>
|
|
||||||
@if (isset($branch))
|
@if (isset($branch))
|
||||||
@foreach ($branch as $branches)
|
@foreach ($branch as $branches)
|
||||||
<option value="{{ $branches->id }}">{{ $branches->name }}</option>
|
<option value="{{ $branches->id }}">
|
||||||
|
{{ $branches->name }}
|
||||||
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
@endif
|
@endif
|
||||||
</select>
|
</select>
|
||||||
</div>
|
@error('jenis_kantor')
|
||||||
</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')
|
|
||||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
@ -36,16 +36,16 @@
|
|||||||
<th class="w-14">
|
<th class="w-14">
|
||||||
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
|
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
|
||||||
</th>
|
</th>
|
||||||
<th class="min-w-[250px]" data-datatable-column="nomor">
|
<th class="min-w-[250px]" data-datatable-column="code">
|
||||||
<span class="sort"> <span class="sort-label"> Nomor </span>
|
<span class="sort"> <span class="sort-label"> Nomor KJPP </span>
|
||||||
<span class="sort-icon"> </span> </span>
|
<span class="sort-icon"> </span> </span>
|
||||||
</th>
|
</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"> <span class="sort-label"> Nama KJPP </span>
|
||||||
<span class="sort-icon"> </span> </span>
|
<span class="sort-icon"> </span> </span>
|
||||||
</th>
|
</th>
|
||||||
<th class="min-w-[50px]" data-datatable-column="kota">
|
<th class="min-w-[50px]" data-datatable-column="jenis_kantor">
|
||||||
<span class="sort"> <span class="sort-label"> Kota </span>
|
<span class="sort"> <span class="sort-label"> Jenis Kantor / Cabang </span>
|
||||||
<span class="sort-icon"> </span> </span>
|
<span class="sort-icon"> </span> </span>
|
||||||
</th>
|
</th>
|
||||||
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
|
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
|
||||||
@ -124,16 +124,16 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
nomor: {
|
nomor: {
|
||||||
title: 'Nomor',
|
title: 'Nomor KJPP',
|
||||||
},
|
},
|
||||||
nama_kjpp: {
|
nama_kjpp: {
|
||||||
title: 'Nama KJPP',
|
title: 'Nama KJPP',
|
||||||
},
|
},
|
||||||
kota: {
|
jenis_kantor: {
|
||||||
title: 'Kota',
|
title: 'Jenis Kantor / Cabang',
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
title: 'Status',
|
title: 'Action',
|
||||||
render: (item, data) => {
|
render: (item, data) => {
|
||||||
return `<div class="flex flex-nowrap justify-center">
|
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">
|
<a class="btn btn-sm btn-icon btn-clear btn-primary" href="basic-data/kjpp/${data.id}/show">
|
||||||
|
@ -166,6 +166,7 @@ Route::middleware(['auth'])->group(function () {
|
|||||||
Route::name('ijin_usaha.')->prefix('ijin_usaha')->group(function () {
|
Route::name('ijin_usaha.')->prefix('ijin_usaha')->group(function () {
|
||||||
Route::get('datatables', [IjinUsahaController::class, 'dataForDatatables'])
|
Route::get('datatables', [IjinUsahaController::class, 'dataForDatatables'])
|
||||||
->name('datatables');
|
->name('datatables');
|
||||||
|
Route::get('export', [IjinUsahaController::class, 'export'])->name('export');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::resource('ijin_usaha', IjinUsahaController::class);
|
Route::resource('ijin_usaha', IjinUsahaController::class);
|
||||||
|
Loading…
Reference in New Issue
Block a user