add business industry crud
This commit is contained in:
120
app/Http/Controllers/Api/BusinessOrIndustriesController.php
Normal file
120
app/Http/Controllers/Api/BusinessOrIndustriesController.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\BusinessIndustryRequest;
|
||||
use App\Imports\BusinessIndustriesImport;
|
||||
use App\Models\BusinessOrIndustry;
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use \Illuminate\Support\Facades\Validator;
|
||||
class BusinessOrIndustriesController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = BusinessOrIndustry::query()->orderBy('id', 'desc');
|
||||
|
||||
if ($request->has("search") && !empty($request->get("search"))) {
|
||||
$search = $request->get("search");
|
||||
|
||||
info($request); // Debugging log
|
||||
|
||||
$query->where(function ($q) use ($search) {
|
||||
$q->where("nop", "LIKE", "%{$search}%")
|
||||
->orWhere("nama_kecamatan", "LIKE", "%{$search}%")
|
||||
->orWhere("nama_kelurahan", "LIKE", "%{$search}%");
|
||||
});
|
||||
}
|
||||
|
||||
return response()->json($query->paginate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(BusinessIndustryRequest $request, string $id)
|
||||
{
|
||||
try{
|
||||
$data = BusinessOrIndustry::findOrFail($id);
|
||||
$data->update($request->validated());
|
||||
return response()->json(['message' => 'Data updated successfully.'], 200);
|
||||
}catch(\Exception $e){
|
||||
\Log::error($e->getMessage());
|
||||
return response()->json(['message' => 'Failed to update data'],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try{
|
||||
$data = BusinessOrIndustry::findOrFail($id);
|
||||
$data->delete();
|
||||
return response()->json(['message' => 'Data deleted successfully.'], 200);
|
||||
}catch(\Exception $e){
|
||||
\Log::error($e->getMessage());
|
||||
return response()->json(['message' => 'Failed to delete data'],500);
|
||||
}
|
||||
}
|
||||
|
||||
public function upload(Request $request){
|
||||
|
||||
if ($request->hasFile('file')) {
|
||||
$file = $request->file('file');
|
||||
}
|
||||
|
||||
// Validasi file
|
||||
$validator = Validator::make($request->all(), [
|
||||
'file' => 'required|mimes:xlsx,xls|max:102400', // Max 100MB
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'message' => 'File validation failed.',
|
||||
'errors' => $validator->errors()
|
||||
], 400);
|
||||
}
|
||||
|
||||
try {
|
||||
// Ambil file dari request
|
||||
$file = $request->file('file');
|
||||
|
||||
// Menggunakan Laravel Excel untuk mengimpor file
|
||||
Excel::import(new BusinessIndustriesImport, $file);
|
||||
|
||||
// Jika sukses, kembalikan respons sukses
|
||||
return response()->json([
|
||||
'message' => 'File uploaded and imported successfully!'
|
||||
], 200);
|
||||
} catch (\Exception $e) {
|
||||
// Jika ada error, kembalikan error response
|
||||
return response()->json([
|
||||
'message' => 'Error during file import.',
|
||||
'error' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,11 @@ namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Auth\LoginRequest;
|
||||
use App\Http\Requests\UsersRequest;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Models\User;
|
||||
use App\Traits\GlobalApiResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -35,4 +37,27 @@ class UsersController extends Controller
|
||||
$request->user()->tokens()->delete();
|
||||
return response()->json(['message' => 'logged out successfully']);
|
||||
}
|
||||
public function store(UsersRequest $request){
|
||||
$validate_data = $request->validated();
|
||||
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
$user = User::create([
|
||||
'name' => $validate_data->name,
|
||||
'email' => $validate_data->email,
|
||||
'password' => Hash::make($validate_data->password),
|
||||
'firstname' => $validate_data->firstname,
|
||||
'lastname' => $validate_data->lastname,
|
||||
'position' => $validate_data->position
|
||||
]);
|
||||
|
||||
$user->roles()->attach($request->role_id);
|
||||
|
||||
DB::commit();
|
||||
return response()->json(['message' => 'Successfully created'],201);
|
||||
}catch(\Exception $e){
|
||||
DB::rollBack();
|
||||
return response()->json(['message' => $e->getMessage()],500);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
66
app/Http/Controllers/BusinessOrIndustriesController.php
Normal file
66
app/Http/Controllers/BusinessOrIndustriesController.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\BusinessOrIndustry;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BusinessOrIndustriesController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('business-industries.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view("business-industries.create");
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(string $id)
|
||||
{
|
||||
$data = BusinessOrIndustry::findOrFail($id);
|
||||
return view('business-industries.edit', compact('data'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Master;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\UsersRequest;
|
||||
use App\Models\Role;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -28,7 +29,7 @@ class UsersController extends Controller
|
||||
$roles = Role::all();
|
||||
return view('master.users.create', compact('roles'));
|
||||
}
|
||||
public function store(Request $request){
|
||||
public function store(UsersRequest $request){
|
||||
$request->validate([
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
@@ -39,6 +40,7 @@ class UsersController extends Controller
|
||||
'role_id' => 'required|exists:roles,id'
|
||||
]);
|
||||
|
||||
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
$user = User::create([
|
||||
|
||||
39
app/Http/Requests/BusinessIndustryRequest.php
Normal file
39
app/Http/Requests/BusinessIndustryRequest.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class BusinessIndustryRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'nama_kecamatan' => 'required|string|max:255',
|
||||
'nama_kelurahan' => 'required|string|max:255',
|
||||
'nop' => 'required|string|max:255|unique:business_or_industries,nop,' . $this->route('api_business_industry'),
|
||||
'nama_wajib_pajak' => 'required|string|max:255',
|
||||
'alamat_wajib_pajak' => 'nullable|string|max:255',
|
||||
'alamat_objek_pajak' => 'required|string|max:255',
|
||||
'luas_bumi' => 'required|numeric',
|
||||
'luas_bangunan' => 'required|numeric',
|
||||
'njop_bumi' => 'required|numeric',
|
||||
'njop_bangunan' => 'required|numeric',
|
||||
'ketetapan' => 'required|string|max:255',
|
||||
'tahun_pajak' => 'required|integer|min:1900|max:' . date('Y'),
|
||||
];
|
||||
}
|
||||
}
|
||||
43
app/Http/Requests/UsersRequest.php
Normal file
43
app/Http/Requests/UsersRequest.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UsersRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
$userId = $this->route('user'); // Get user ID from route (used in update)
|
||||
|
||||
return [
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => [
|
||||
'required',
|
||||
'string',
|
||||
'email',
|
||||
'max:255',
|
||||
Rule::unique('users')->ignore($userId), // Ignore the user's own email when updating
|
||||
],
|
||||
'password' => [$this->isMethod('post') ? 'required' : 'nullable', 'confirmed', 'max:255'],
|
||||
'firstname' => ['required', 'string', 'max:255'],
|
||||
'lastname' => ['required', 'string', 'max:255'],
|
||||
'position' => ['required', 'string', 'max:255'],
|
||||
'role_id' => ['required', 'exists:roles,id'],
|
||||
];
|
||||
}
|
||||
}
|
||||
39
app/Imports/BusinessIndustriesImport.php
Normal file
39
app/Imports/BusinessIndustriesImport.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Imports;
|
||||
|
||||
use App\Models\BusinessOrIndustry;
|
||||
use Maatwebsite\Excel\Concerns\ToModel;
|
||||
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class BusinessIndustriesImport implements ToCollection
|
||||
{
|
||||
/**
|
||||
* @param array $row
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Model|null
|
||||
*/
|
||||
public function collection(Collection $rows)
|
||||
{
|
||||
foreach ($rows->skip(1) as $row){
|
||||
$clean_nop = preg_replace('/[^A-Za-z0-9]/', '', $row[2]);
|
||||
if (!BusinessOrIndustry::where('nop', $clean_nop)->exists()) {
|
||||
BusinessOrIndustry::create([
|
||||
'nama_kecamatan' => $row[0],
|
||||
'nama_kelurahan' => $row[1],
|
||||
'nop' => $clean_nop, // Store cleaned 'nop'
|
||||
'nama_wajib_pajak' => $row[3],
|
||||
'alamat_wajib_pajak' => $row[4],
|
||||
'alamat_objek_pajak' => $row[5],
|
||||
'luas_bumi' => $row[6],
|
||||
'luas_bangunan' => $row[7],
|
||||
'njop_bumi' => $row[8],
|
||||
'njop_bangunan' => $row[9],
|
||||
'ketetapan' => $row[10],
|
||||
'tahun_pajak' => $row[11],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
24
app/Models/BusinessOrIndustry.php
Normal file
24
app/Models/BusinessOrIndustry.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class BusinessOrIndustry extends Model
|
||||
{
|
||||
protected $table = "business_or_industries";
|
||||
protected $fillable = [
|
||||
'nama_kecamatan',
|
||||
'nama_kelurahan',
|
||||
'nop',
|
||||
'nama_wajib_pajak',
|
||||
'alamat_wajib_pajak',
|
||||
'alamat_objek_pajak',
|
||||
'luas_bumi',
|
||||
'luas_bangunan',
|
||||
'njop_bumi',
|
||||
'njop_bangunan',
|
||||
'ketetapan',
|
||||
'tahun_pajak',
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user