diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php new file mode 100644 index 0000000..dc95014 --- /dev/null +++ b/app/Http/Controllers/GroupController.php @@ -0,0 +1,70 @@ + Group::paginate(), + ]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $request->validate([ + 'name' => 'required|string|max:255' + ]); + + Group::create(['name' => $request->name]); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Group $group) + { + $request->validate([ + 'name' => 'required|string|max:255' + ]); + + $group->update(['name' => $request->name]); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy(Group $group) + { + $group->regions()->each(function ($region) { + $region->companies()->each(function($company) { + $company->users()->delete(); + }); + $region->companies()->delete(); + }); + $group->regions()->delete(); + $group->delete(); + } +} diff --git a/app/Http/Controllers/RegionController.php b/app/Http/Controllers/RegionController.php new file mode 100644 index 0000000..967780a --- /dev/null +++ b/app/Http/Controllers/RegionController.php @@ -0,0 +1,78 @@ + Region::with(['group'])->paginate(), + 'groups' => Group::all(), + ]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $request->validate([ + 'name' => 'required|string|max:255', + 'group_id' => 'required|exists:groups,id' + ]); + + Region::create([ + 'group_id' => $request->group_id, + 'name' => $request->name + ]); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Region $region) + { + $request->validate([ + 'name' => 'required|string|max:255', + 'group_id' => 'required|exists:groups,id' + ]); + + $region->update([ + 'group_id' => $request->group_id, + 'name' => $request->name + ]); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy(Region $region) + { + $region->companies()->each(function($company) { + $company->users()->delete(); + }); + $region->companies()->delete(); + + $region->delete(); + } +} diff --git a/app/Models/Company.php b/app/Models/Company.php new file mode 100644 index 0000000..75d51d7 --- /dev/null +++ b/app/Models/Company.php @@ -0,0 +1,22 @@ +hasMany(User::class); + } +} diff --git a/app/Models/Group.php b/app/Models/Group.php new file mode 100644 index 0000000..ac947f1 --- /dev/null +++ b/app/Models/Group.php @@ -0,0 +1,20 @@ +hasMany(Region::class); + } +} diff --git a/app/Models/Region.php b/app/Models/Region.php new file mode 100644 index 0000000..23e1990 --- /dev/null +++ b/app/Models/Region.php @@ -0,0 +1,26 @@ +belongsTo(Group::class); + } + + public function companies() + { + return $this->hasMany(Company::class); + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index ec17533..69fcd21 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -20,8 +20,9 @@ return new class extends Migration { $table->string('password'); $table->smallInteger('is_admin')->default(0); $table->bigInteger('role_id')->nullable(); - $table->string('group')->nullable(); - $table->string('region')->nullable(); + // $table->string('group')->nullable(); + // $table->string('region')->nullable(); + $table->bigInteger("company_id")->nullable(); $table->rememberToken(); $table->timestamps(); }); diff --git a/database/migrations/2022_01_30_141034_create_groups_table.php b/database/migrations/2022_01_30_141034_create_groups_table.php new file mode 100644 index 0000000..8157c27 --- /dev/null +++ b/database/migrations/2022_01_30_141034_create_groups_table.php @@ -0,0 +1,32 @@ +id(); + $table->string("name"); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('groups'); + } +}; diff --git a/database/migrations/2022_01_30_141046_create_regions_table.php b/database/migrations/2022_01_30_141046_create_regions_table.php new file mode 100644 index 0000000..ecf0e6a --- /dev/null +++ b/database/migrations/2022_01_30_141046_create_regions_table.php @@ -0,0 +1,33 @@ +id(); + $table->foreignId("group_id")->constrained(); + $table->string("name"); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('regions'); + } +}; diff --git a/database/migrations/2022_01_30_141103_create_companies_table.php b/database/migrations/2022_01_30_141103_create_companies_table.php new file mode 100644 index 0000000..faa7fa7 --- /dev/null +++ b/database/migrations/2022_01_30_141103_create_companies_table.php @@ -0,0 +1,34 @@ +id(); + $table->foreignId("region_id")->constrained(); + $table->string("name"); + $table->string("short"); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('companies'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 2fa9e9e..bd8ddea 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -57,6 +57,18 @@ class DatabaseSeeder extends Seeder ['name' => 'update-user', 'label' => 'Edit User'], ['name' => 'create-user', 'label' => 'Buat User'], ['name' => 'delete-user', 'label' => 'Hapus User'], + ['name' => 'view-group', 'label' => 'Lihat Group'], + ['name' => 'update-group', 'label' => 'Edit Group'], + ['name' => 'create-group', 'label' => 'Buat Group'], + ['name' => 'delete-group', 'label' => 'Hapus Group'], + ['name' => 'view-region', 'label' => 'Lihat Region'], + ['name' => 'update-region', 'label' => 'Edit Region'], + ['name' => 'create-region', 'label' => 'Buat Region'], + ['name' => 'delete-region', 'label' => 'Hapus Region'], + ['name' => 'view-company', 'label' => 'Lihat Perusahaan'], + ['name' => 'update-company', 'label' => 'Edit Perusahaan'], + ['name' => 'create-company', 'label' => 'Buat Perusahaan'], + ['name' => 'delete-company', 'label' => 'Hapus Perusahaan'], ['name' => 'view-setting', 'label' => 'Setting'], ]; diff --git a/resources/js/Layouts/AuthenticatedLayout.jsx b/resources/js/Layouts/AuthenticatedLayout.jsx index 1e9702d..d4e0b5f 100644 --- a/resources/js/Layouts/AuthenticatedLayout.jsx +++ b/resources/js/Layouts/AuthenticatedLayout.jsx @@ -13,6 +13,11 @@ const rs = [ {name: "Ketegori", route: 'categories.index', show: true, permission: 'view-category'}, {name: "Jenis", route: 'types.index', show: true, permission: 'view-type'}, ]}, + {name: "Perusahaan", show: true, items: [ + {name:"Group", route: "groups.index", show: true, permission: 'view-group'}, + {name:"Region", route: "regions.index", show: true, permission: 'view-region'}, + {name:"Perusahaan", route: "groups.index", show: true, permission: 'view-company'}, + ]}, {name: "User", show: true, items: [ {name:"User", route: "users.index", show: true, permission: 'view-user'}, {name:"Role", route: "roles.index", show: true, permission: 'view-role'}, @@ -54,7 +59,7 @@ export default function Authenticated({ auth, children, flash, notify }) {
-Id | +Nama | ++ |
---|---|---|
{group.id} | +{group.name} | +
+ {canUpdate && (
+
+ toggle(group)
+ }
+ >
+ Edit
+
+ )}
+ {canDelete && (
+
+ handleDelete(group)
+ }
+ >
+ Delete
+
+ )}
+ |
+
Id | +Nama | +Group | ++ |
---|---|---|---|
{region.id} | +{region.name} | +{region.group.name} | +
+ {canUpdate && (
+
+ toggle(region)
+ }
+ >
+ Edit
+
+ )}
+ {canDelete && (
+
+ handleDelete(region)
+ }
+ >
+ Delete
+
+ )}
+ |
+