done crud spatial plannings

This commit is contained in:
arifal
2025-02-20 15:35:06 +07:00
parent 54146c8c08
commit 7a56735099
19 changed files with 788 additions and 51 deletions

View File

@@ -3,8 +3,13 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\ExcelUploadRequest;
use App\Http\Requests\SpatialPlanningsRequest;
use App\Http\Resources\SpatialPlanningsResource;
use App\Imports\SpatialPlanningImport;
use App\Models\SpatialPlanning;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class SpatialPlanningsController extends Controller
{
@@ -18,13 +23,20 @@ class SpatialPlanningsController extends Controller
$query = $query->where("name", "LIKE", "%{$request->get("search")}%")
->orWhere("nomor", "LIKE", "%{$request->get("search")}%");
}
$query = $query->paginate();
return response()->json($query);
return SpatialPlanningsResource::collection($query->paginate());
}
public function store(Request $request)
public function store(SpatialPlanningsRequest $request)
{
//
try{
$validated = $request->validated();
$data = SpatialPlanning::create($validated);
return response()->json(['message' => 'Successfully created', new SpatialPlanningsResource($data)]);
}catch(\Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
/**
@@ -38,9 +50,18 @@ class SpatialPlanningsController extends Controller
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
public function update(SpatialPlanningsRequest $request, string $id)
{
//
try{
$validated = $request->validated();
$data = SpatialPlanning::find($id);
$data->update($validated);
return response()->json(['message' => 'Successfully updated', new SpatialPlanningsResource($data)]);
}catch(\Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
/**
@@ -51,7 +72,27 @@ class SpatialPlanningsController extends Controller
try{
SpatialPlanning::destroy($id);
return response()->json([
'message' => 'Data berhasil dihapus'
'message' => 'Successfully deleted'
], 200);
}catch(\Exception $e){
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function upload(ExcelUploadRequest $request){
try{
if(!$request->hasFile('file')){
return response()->json([
'error' => 'No file provided'
], 400);
}
$file = $request->file('file');
Excel::import(new SpatialPlanningImport, $file);
return response()->json([
'message' => 'Successfully imported'
], 200);
}catch(\Exception $e){
return response()->json([

View File

@@ -2,63 +2,27 @@
namespace App\Http\Controllers;
use App\Models\SpatialPlanning;
use Illuminate\Http\Request;
class SpatialPlanningsController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
return view('spatial-plannings.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('spatial-plannings.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)
{
return view('spatial-plannings.update');
$data = SpatialPlanning::findOrFail($id);
return view('spatial-plannings.update', 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)
{
//
public function upload (){
return view('spatial-plannings.upload');
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ExcelUploadRequest 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 [
"file" => "required|file|mimes:xlsx,xls|max:102400"
];
}
}

View File

@@ -29,7 +29,7 @@ class SpatialPlanningsRequest extends FormRequest
'luas' => ['required','numeric','regex:/^\d{1,16}(\.\d{1,2})?$/'],
'lokasi' => ['required','string'],
'nomor' => ['required','string','max:255',Rule::unique('spatial_plannings')->ignore($this->id)],
'tanggal' => ['required','date'],
'sp_date' => ['required','date'],
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class SpatialPlanningsResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return parent::toArray($request);
}
}

View File

@@ -0,0 +1,77 @@
<?php
namespace App\Imports;
use App\Models\SpatialPlanning;
use Carbon\Carbon;
use DateTime;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class SpatialPlanningImport implements ToCollection, WithMultipleSheets
{
/**
* @param Collection $collection
*/
public function collection(Collection $collection)
{
$months = [
"Januari" => "January", "Februari" => "February", "Maret" => "March",
"April" => "April", "Mei" => "May", "Juni" => "June",
"Juli" => "July", "Agustus" => "August", "September" => "September",
"Oktober" => "October", "November" => "November", "Desember" => "December"
];
$collection->skip(2)->each(function ($row) use ($months) {
if (empty(array_filter($row->toArray()))) {
return;
}
if (!isset($row[6]) || empty($row[6])) {
return;
}
if(!SpatialPlanning::where("nomor", $row[6])->exists()){
$clean_nomor = str_replace('\\','',$row[6]);
$date_string = isset($row[7]) ? trim($row[7]) : null;
$clean_sp_date = null;
if ($date_string) {
if(is_numeric($date_string)) {
$clean_sp_date = Carbon::createFromFormat('Y-m-d', '1900-01-01')->addDays($date_string - 2)->format('Y-m-d');
}else{
foreach ($months as $id => $en) {
$date_string = str_replace($id, $en, $date_string);
}
$formats = ['j F Y', 'd F Y', 'j-M-Y', 'd-M-Y'];
foreach ($formats as $format) {
$date = DateTime::createFromFormat($format, $date_string);
if ($date) {
$clean_sp_date = $date->format('Y-m-d');
break;
}
}
}
}
SpatialPlanning::create([
'name' => $row[1],
'kbli' => $row[2],
'kegiatan' => $row[3],
'luas' => $row[4],
'lokasi' => $row[5],
'nomor' => $clean_nomor,
'sp_date' => $clean_sp_date,
]);
}
});
}
public function sheets(): array {
return [
0 => $this
];
}
}