diff --git a/app/Http/Controllers/OutletController.php b/app/Http/Controllers/OutletController.php new file mode 100644 index 0000000..f6dece6 --- /dev/null +++ b/app/Http/Controllers/OutletController.php @@ -0,0 +1,124 @@ +where('name', 'like', '%'.request('q').'%'); + $outlets = $outletQuery->paginate(25); + + return view('outlets.index', compact('outlets')); + } + + /** + * Show the form for creating a new outlet. + * + * @return \Illuminate\View\View + */ + public function create() + { + $this->authorize('create', new Outlet); + + return view('outlets.create'); + } + + /** + * Store a newly created outlet in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Routing\Redirector + */ + public function store(Request $request) + { + $this->authorize('create', new Outlet); + + $newOutlet = $request->validate([ + 'name' => 'required|max:60', + 'address' => 'nullable|max:255', + 'latitude' => 'nullable|required_with:longitude|max:15', + 'longitude' => 'nullable|required_with:latitude|max:15', + ]); + $newOutlet['creator_id'] = auth()->id(); + + $outlet = Outlet::create($newOutlet); + + return redirect()->route('outlets.show', $outlet); + } + + /** + * Display the specified outlet. + * + * @param \App\Outlet $outlet + * @return \Illuminate\View\View + */ + public function show(Outlet $outlet) + { + return view('outlets.show', compact('outlet')); + } + + /** + * Show the form for editing the specified outlet. + * + * @param \App\Outlet $outlet + * @return \Illuminate\View\View + */ + public function edit(Outlet $outlet) + { + $this->authorize('update', $outlet); + + return view('outlets.edit', compact('outlet')); + } + + /** + * Update the specified outlet in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Outlet $outlet + * @return \Illuminate\Routing\Redirector + */ + public function update(Request $request, Outlet $outlet) + { + $this->authorize('update', $outlet); + + $outletData = $request->validate([ + 'name' => 'required|max:60', + 'address' => 'nullable|max:255', + 'latitude' => 'nullable|required_with:longitude|max:15', + 'longitude' => 'nullable|required_with:latitude|max:15', + ]); + $outlet->update($outletData); + + return redirect()->route('outlets.show', $outlet); + } + + /** + * Remove the specified outlet from storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Outlet $outlet + * @return \Illuminate\Routing\Redirector + */ + public function destroy(Request $request, Outlet $outlet) + { + $this->authorize('delete', $outlet); + + $request->validate(['outlet_id' => 'required']); + + if ($request->get('outlet_id') == $outlet->id && $outlet->delete()) { + return redirect()->route('outlets.index'); + } + + return back(); + } +} diff --git a/app/Outlet.php b/app/Outlet.php new file mode 100644 index 0000000..2529e66 --- /dev/null +++ b/app/Outlet.php @@ -0,0 +1,31 @@ + $this->name, 'type' => __('outlet.outlet'), + ]); + $link = ''; + $link .= $this->name; + $link .= ''; + + return $link; + } + + public function creator() + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Policies/OutletPolicy.php b/app/Policies/OutletPolicy.php new file mode 100644 index 0000000..305f88c --- /dev/null +++ b/app/Policies/OutletPolicy.php @@ -0,0 +1,64 @@ + 'App\Policies\OutletPolicy', 'App\Model' => 'App\Policies\ModelPolicy', ]; diff --git a/database/factories/OutletFactory.php b/database/factories/OutletFactory.php new file mode 100644 index 0000000..2891188 --- /dev/null +++ b/database/factories/OutletFactory.php @@ -0,0 +1,18 @@ +define(Outlet::class, function (Faker $faker) { + + return [ + 'name' => ucwords($faker->words(2, true)), + 'address' => $faker->address, + 'latitude' => $faker->latitude(-3.29, -3.35), + 'longitude' => $faker->longitude(114.56, 114.63), + 'creator_id' => function () { + return factory(User::class)->create()->id; + }, + ]; +}); diff --git a/database/migrations/2018_12_10_125521_create_outlets_table.php b/database/migrations/2018_12_10_125521_create_outlets_table.php new file mode 100644 index 0000000..afbbcf5 --- /dev/null +++ b/database/migrations/2018_12_10_125521_create_outlets_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->string('name', 60); + $table->string('address')->nullable(); + $table->string('latitude', 15)->nullable(); + $table->string('longitude', 15)->nullable(); + $table->unsignedInteger('creator_id'); + $table->timestamps(); + + $table->foreign('creator_id')->references('id')->on('users')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('outlets'); + } +} diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php new file mode 100644 index 0000000..a8eaf4b --- /dev/null +++ b/resources/lang/en/app.php @@ -0,0 +1,18 @@ + '#', + 'total' => 'Total', + 'action' => 'Actions', + 'show_detail_title' => 'View :name :type detail', + + // Actions + 'show' => 'View Detail', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'cancel' => 'Cancel', + 'reset' => 'Reset', + 'delete_confirm' => 'Are you sure to delete this?', + 'delete_confirm_button' => 'YES, delete it!', +]; diff --git a/resources/lang/en/outlet.php b/resources/lang/en/outlet.php new file mode 100644 index 0000000..86dcf85 --- /dev/null +++ b/resources/lang/en/outlet.php @@ -0,0 +1,35 @@ + 'Outlet', + 'list' => 'Outlet List', + 'search' => 'Search Outlet', + 'search_text' => 'Name ...', + 'all' => 'All Outlet', + 'select' => 'Select Outlet', + 'detail' => 'Outlet Detail', + 'not_found' => 'Outlet not found.', + 'empty' => 'Outlet is empty.', + 'back_to_show' => 'Back to Outlet Detail', + 'back_to_index' => 'Back to Outlet List', + + // Actions + 'create' => 'Create new Outlet', + 'created' => 'A new Outlet has been created.', + 'show' => 'View Outlet Detail', + 'edit' => 'Edit Outlet', + 'update' => 'Update Outlet', + 'updated' => 'Outlet data has been updated.', + 'delete' => 'Delete Outlet', + 'delete_confirm' => 'Are you sure to delete this Outlet?', + 'deleted' => 'Outlet has been deleted.', + 'undeleted' => 'Outlet not deleted.', + 'undeleteable' => 'Outlet data cannot be deleted.', + + // Attributes + 'name' => 'Outlet Name', + 'address' => 'Outlet Address', + 'latitude' => 'Latitude', + 'longitude' => 'Longitude', +]; diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 32bf5f6..47f604f 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -49,6 +49,9 @@ @endif @else +