From 04c97952c1ca86d76a351694dfaeb6f109083af1 Mon Sep 17 00:00:00 2001 From: ajikamaludin Date: Tue, 31 Jan 2023 15:43:13 +0700 Subject: [PATCH] kurang export import --- app/Http/Controllers/CompanyController.php | 1 - app/Http/Controllers/DocumentController.php | 45 ++++++++--- app/Http/Controllers/GroupController.php | 7 -- app/Http/Controllers/RegionController.php | 5 -- app/Http/Controllers/RoleController.php | 4 - app/Http/Controllers/UserController.php | 16 ++-- app/Models/Category.php | 5 +- app/Models/Company.php | 9 ++- app/Models/Department.php | 18 ----- app/Models/Document.php | 19 +++++ app/Models/Group.php | 5 +- app/Models/Region.php | 10 ++- app/Models/Type.php | 11 ++- app/Models/TypeDoc.php | 18 ----- app/Models/User.php | 8 +- composer.json | 1 + composer.lock | 59 +++++++++++++- .../2014_10_12_000000_create_users_table.php | 3 +- ..._09_18_020641_create_departments_table.php | 31 ------- ...22_09_18_034351_create_type_docs_table.php | 31 ------- ...22_09_18_034528_create_documents_table.php | 1 - database/seeders/DatabaseSeeder.php | 80 +++++++++++++++++++ resources/js/Pages/Dashboard.jsx | 52 +----------- resources/js/Pages/Document/Detail.jsx | 37 +++++---- resources/js/Pages/Document/Form.jsx | 65 +++++---------- resources/js/Pages/Document/Index.jsx | 33 +++++++- resources/js/Pages/User/Index.jsx | 4 +- resources/js/Pages/User/UserFormModal.jsx | 69 +++++++--------- routes/web.php | 2 +- 29 files changed, 341 insertions(+), 308 deletions(-) delete mode 100644 app/Models/Department.php delete mode 100644 app/Models/TypeDoc.php delete mode 100644 database/migrations/2022_09_18_020641_create_departments_table.php delete mode 100644 database/migrations/2022_09_18_034351_create_type_docs_table.php diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 1ba2d42..f4eb56b 100644 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -72,7 +72,6 @@ class CompanyController extends Controller */ public function destroy(Company $company) { - $company->users()->delete(); $company->delete(); } } diff --git a/app/Http/Controllers/DocumentController.php b/app/Http/Controllers/DocumentController.php index ab5303d..887f6a6 100644 --- a/app/Http/Controllers/DocumentController.php +++ b/app/Http/Controllers/DocumentController.php @@ -3,8 +3,10 @@ namespace App\Http\Controllers; use App\Models\Category; +use App\Models\Company; use App\Models\Document; use App\Models\Type; +use App\Models\User; use Illuminate\Http\Request; class DocumentController extends Controller @@ -13,6 +15,15 @@ class DocumentController extends Controller { $query = Document::with(['variety', 'category']); + if ($request->has('status')) { + if($request->status == 1) { + $query->whereDate('due_date', '<', now()->toDateString()); + } + if($request->status == 2) { + $query->closeToExpired(); + } + } + if ($request->has('sortBy') && $request->has('sortRule')) { $query->orderBy($request->sortBy, $request->sortRule); } else { @@ -37,7 +48,15 @@ class DocumentController extends Controller public function create() { + $user = User::find(auth()->user()->id); + if ($user->is_admin) { + $companies = Company::all(); + } else { + $companies = Company::where('region_id', $user->region_id)->get(); + } + return inertia('Document/Form', [ + 'companies' => $companies, 'types' => Type::all(), 'categories' => Category::all(), ]); @@ -48,7 +67,6 @@ class DocumentController extends Controller $request->validate([ "no_doc" => "nullable|string", "name" => "required|string", - "company_name" => "required|string", "type_id" => "required|exists:types,id", "category_id" => "required|exists:categories,id", "publisher" => "required|string", @@ -57,8 +75,7 @@ class DocumentController extends Controller "due_date" => "required_if:type,0", "status" => "required|in:0,1", "type" => "required|in:0,1", - "group" => "required|string", - "region" => "required|string", + "company_id" => "required|exists:companies,id", "document" => "required|file", ]); @@ -79,7 +96,6 @@ class DocumentController extends Controller "no" => Document::count() + 1, "no_doc" => $request->no_doc, "name" => $request->name, - "company_name" => $request->company_name, "type_id" => $request->type_id, "category_id" => $request->category_id, "publisher" => $request->publisher, @@ -88,8 +104,7 @@ class DocumentController extends Controller "due_date" => $request->due_date, "status" => $request->status, "type" => $request->type, - "group" => $request->group, - "region" => $request->region, + "company_id" => $request->company_id, "user_id" => auth()->user()->id, ]); @@ -105,7 +120,15 @@ class DocumentController extends Controller public function edit(Document $doc) { + $user = User::find(auth()->user()->id); + if ($user->is_admin) { + $companies = Company::all(); + } else { + $companies = Company::where('region_id', $user->region_id)->get(); + } + return inertia('Document/Form', [ + 'companies' => $companies, 'types' => Type::all(), 'categories' => Category::all(), 'doc' => $doc->load(['variety', 'category']) @@ -117,7 +140,6 @@ class DocumentController extends Controller $request->validate([ "no_doc" => "nullable|string", "name" => "required|string", - "company_name" => "required|string", "type_id" => "required|exists:types,id", "category_id" => "required|exists:categories,id", "publisher" => "required|string", @@ -126,8 +148,7 @@ class DocumentController extends Controller "due_date" => "required_if:type,1", "status" => "required|in:0,1", "type" => "required|in:0,1", - "group" => "required|string", - "region" => "required|string", + "company_id" => "required|exists:companies,id", "document" => "nullable|file", ]); @@ -148,7 +169,6 @@ class DocumentController extends Controller "no" => Document::count() + 1, "no_doc" => $request->no_doc, "name" => $request->name, - "company_name" => $request->company_name, "type_id" => $request->type_id, "category_id" => $request->category_id, "publisher" => $request->publisher, @@ -157,8 +177,7 @@ class DocumentController extends Controller "due_date" => $request->due_date, "status" => $request->status, "type" => $request->type, - "group" => $request->group, - "region" => $request->region, + "company_id" => $request->company_id, "user_id" => auth()->user()->id, ]); @@ -177,7 +196,7 @@ class DocumentController extends Controller public function show(Document $doc) { return inertia('Document/Detail', [ - 'doc' => $doc->load(['variety', 'category']), + 'doc' => $doc->load(['variety', 'category', 'company.region.group']), 'doc_url' => asset('documents/'.$doc->document), ]); } diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index dc95014..edc5e4e 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -58,13 +58,6 @@ class GroupController extends Controller */ 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 index 967780a..8ed9c9f 100644 --- a/app/Http/Controllers/RegionController.php +++ b/app/Http/Controllers/RegionController.php @@ -68,11 +68,6 @@ class RegionController extends Controller */ public function destroy(Region $region) { - $region->companies()->each(function($company) { - $company->users()->delete(); - }); - $region->companies()->delete(); - $region->delete(); } } diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php index e669408..9f9e374 100644 --- a/app/Http/Controllers/RoleController.php +++ b/app/Http/Controllers/RoleController.php @@ -89,10 +89,6 @@ class RoleController extends Controller */ public function destroy(Role $role) { - $role->rolePermissions()->delete(); - - $role->users()->delete(); - $role->delete(); } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index e45eae5..e583fdf 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Region; use App\Models\Role; use App\Models\User; use Illuminate\Http\Request; @@ -15,7 +16,7 @@ class UserController extends Controller */ public function index(Request $request) { - $query = User::with('role')->orderBy('id'); + $query = User::with(['role', 'region.group'])->orderBy('id'); if ($request->q != null) { $query->where('name', 'like', '%'.$request->q.'%'); @@ -24,6 +25,7 @@ class UserController extends Controller return inertia('User/Index', [ 'users' => $query->paginate(10), 'roles' => Role::all(), + 'regions' => Region::all(), ]); } @@ -39,7 +41,8 @@ class UserController extends Controller 'name' => 'required|string', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:6', - 'role_id' => 'required|exists:roles,id' + 'role_id' => 'required|exists:roles,id', + 'region_id' => 'required|exists:regions,id', ]); User::create([ @@ -47,8 +50,7 @@ class UserController extends Controller 'email' => $request->email, 'password' => bcrypt($request->password), 'role_id' => $request->role_id, - 'group' => $request->group, - 'region' => $request->region + 'region_id' => $request->region_id ]); return redirect()->route('users.index'); @@ -71,11 +73,12 @@ class UserController extends Controller if ($user->is_admin == 0) { $request->validate([ - 'role_id' => 'required|exists:roles,id' + 'role_id' => 'required|exists:roles,id', + 'region_id' => 'required|exists:regions,id', ]); } - $user->update($request->only(['name', 'email', 'role_id', 'group', 'region'])); + $user->update($request->only(['name', 'email', 'role_id', 'region_id'])); if ($request->password != null) { $user->update(['password' => bcrypt($request->password)]); } @@ -92,6 +95,5 @@ class UserController extends Controller public function destroy(User $user) { $user->delete(); - return redirect()->back(); } } diff --git a/app/Models/Category.php b/app/Models/Category.php index 3e067c3..f30071d 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -4,10 +4,11 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use ShiftOneLabs\LaravelCascadeDeletes\CascadesDeletes; class Category extends Model { - use HasFactory; + use HasFactory, CascadesDeletes; protected $fillable = [ "name", @@ -15,6 +16,8 @@ class Category extends Model "duration", ]; + protected $cascadeDeletes = ['documents']; + public function documents() { return $this->hasMany(Document::class); diff --git a/app/Models/Company.php b/app/Models/Company.php index f9c04f8..9eca732 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -4,10 +4,11 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use ShiftOneLabs\LaravelCascadeDeletes\CascadesDeletes; class Company extends Model { - use HasFactory; + use HasFactory, CascadesDeletes; protected $fillable = [ "region_id", @@ -15,13 +16,15 @@ class Company extends Model "short" ]; + protected $cascadeDeletes = ['documents']; + public function region() { return $this->belongsTo(Region::class); } - public function users() + public function documents() { - return $this->hasMany(User::class); + return $this->hasMany(Document::class); } } diff --git a/app/Models/Department.php b/app/Models/Department.php deleted file mode 100644 index 6883cf1..0000000 --- a/app/Models/Department.php +++ /dev/null @@ -1,18 +0,0 @@ -hasMany(Document::class, 'document_id'); - } -} diff --git a/app/Models/Document.php b/app/Models/Document.php index 188862d..913c6fd 100644 --- a/app/Models/Document.php +++ b/app/Models/Document.php @@ -49,6 +49,11 @@ class Document extends Model return $this->belongsTo(User::class, 'user_id'); } + public function company() + { + return $this->belongsTo(Company::class); + } + public function variety() { return $this->belongsTo(Type::class, 'type_id'); @@ -111,4 +116,18 @@ class Document extends Model }, ); } + + public function scopeCloseToExpired($query) { + $ids = collect(); + $categories = Category::all(); + foreach($categories as $category) { + foreach($category->documents as $docs) { + if ($docs->is_close_due != 0) { + $ids->add($docs->id); + } + } + } + + $query->whereIn("id", $ids->toArray()); + } } diff --git a/app/Models/Group.php b/app/Models/Group.php index ac947f1..40bc88b 100644 --- a/app/Models/Group.php +++ b/app/Models/Group.php @@ -4,15 +4,18 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use ShiftOneLabs\LaravelCascadeDeletes\CascadesDeletes; class Group extends Model { - use HasFactory; + use HasFactory, CascadesDeletes; protected $fillable = [ "name" ]; + protected $cascadeDeletes = ['regions']; + public function regions() { return $this->hasMany(Region::class); diff --git a/app/Models/Region.php b/app/Models/Region.php index 23e1990..99ac1d4 100644 --- a/app/Models/Region.php +++ b/app/Models/Region.php @@ -4,16 +4,19 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use ShiftOneLabs\LaravelCascadeDeletes\CascadesDeletes; class Region extends Model { - use HasFactory; + use HasFactory, CascadesDeletes; protected $fillable = [ "name", "group_id", ]; + protected $cascadeDeletes = ['companies', 'users']; + public function group() { return $this->belongsTo(Group::class); @@ -23,4 +26,9 @@ class Region extends Model { return $this->hasMany(Company::class); } + + public function users() + { + return $this->hasMany(User::class); + } } diff --git a/app/Models/Type.php b/app/Models/Type.php index 4b9b69b..9a18219 100644 --- a/app/Models/Type.php +++ b/app/Models/Type.php @@ -4,12 +4,21 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use ShiftOneLabs\LaravelCascadeDeletes\CascadesDeletes; class Type extends Model { - use HasFactory; + use HasFactory, CascadesDeletes; protected $fillable = [ "name", ]; + + protected $cascadeDeletes = ['documents']; + + public function documents() + { + return $this->hasMany(Document::class); + } + } diff --git a/app/Models/TypeDoc.php b/app/Models/TypeDoc.php deleted file mode 100644 index 4d7f2d2..0000000 --- a/app/Models/TypeDoc.php +++ /dev/null @@ -1,18 +0,0 @@ -hasMany(Document::class, 'document_id'); - } -} diff --git a/app/Models/User.php b/app/Models/User.php index e17417e..79fb241 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -25,8 +25,7 @@ class User extends Authenticatable 'password', 'is_admin', 'role_id', - 'group', - 'region' + 'region_id' ]; /** @@ -52,4 +51,9 @@ class User extends Authenticatable { return $this->belongsTo(Role::class); } + + public function region() + { + return $this->belongsTo(Region::class); + } } diff --git a/composer.json b/composer.json index 37cefff..be0703b 100644 --- a/composer.json +++ b/composer.json @@ -12,6 +12,7 @@ "laravel/sanctum": "^2.8", "laravel/tinker": "^2.7", "rap2hpoutre/fast-excel": "^4.1", + "shiftonelabs/laravel-cascade-deletes": "^1.0", "tightenco/ziggy": "^1.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 5846f66..9970e67 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c0ad82cf8d1291dec2720bce2cd0b887", + "content-hash": "6ea3a91a17dd8ccd5fa4886bcef58ef8", "packages": [ { "name": "brick/math", @@ -3079,6 +3079,63 @@ ], "time": "2022-07-21T14:21:25+00:00" }, + { + "name": "shiftonelabs/laravel-cascade-deletes", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/shiftonelabs/laravel-cascade-deletes.git", + "reference": "af256e3796f997b5f66d34c7ec25c2a1c560e36f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/shiftonelabs/laravel-cascade-deletes/zipball/af256e3796f997b5f66d34c7ec25c2a1c560e36f", + "reference": "af256e3796f997b5f66d34c7ec25c2a1c560e36f", + "shasum": "" + }, + "require": { + "illuminate/database": ">=4.1", + "illuminate/events": ">=4.1", + "php": ">=5.5.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "phpunit/phpunit": "~4.0", + "shiftonelabs/codesniffer-standard": "0.*", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "ShiftOneLabs\\LaravelCascadeDeletes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Carlo-Hickman", + "email": "patrick@shiftonelabs.com" + } + ], + "description": "Adds application level cascading deletes to Eloquent Models.", + "homepage": "https://github.com/shiftonelabs/laravel-cascade-deletes", + "keywords": [ + "cascade", + "deletes", + "eloquent", + "laravel", + "lumen", + "model" + ], + "support": { + "issues": "https://github.com/shiftonelabs/laravel-cascade-deletes/issues", + "source": "https://github.com/shiftonelabs/laravel-cascade-deletes" + }, + "time": "2020-04-02T07:31:25+00:00" + }, { "name": "symfony/console", "version": "v6.2.5", 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 69fcd21..3abd6ed 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -22,7 +22,8 @@ return new class extends Migration { $table->bigInteger('role_id')->nullable(); // $table->string('group')->nullable(); // $table->string('region')->nullable(); - $table->bigInteger("company_id")->nullable(); + // $table->bigInteger("company_id")->nullable(); + $table->bigInteger("region_id")->nullable(); $table->rememberToken(); $table->timestamps(); }); diff --git a/database/migrations/2022_09_18_020641_create_departments_table.php b/database/migrations/2022_09_18_020641_create_departments_table.php deleted file mode 100644 index cecd327..0000000 --- a/database/migrations/2022_09_18_020641_create_departments_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('departments'); - } -}; diff --git a/database/migrations/2022_09_18_034351_create_type_docs_table.php b/database/migrations/2022_09_18_034351_create_type_docs_table.php deleted file mode 100644 index a3d14e3..0000000 --- a/database/migrations/2022_09_18_034351_create_type_docs_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('type_docs'); - } -}; diff --git a/database/migrations/2022_09_18_034528_create_documents_table.php b/database/migrations/2022_09_18_034528_create_documents_table.php index 1ceb2b7..c20a9ba 100644 --- a/database/migrations/2022_09_18_034528_create_documents_table.php +++ b/database/migrations/2022_09_18_034528_create_documents_table.php @@ -27,7 +27,6 @@ return new class extends Migration { $table->smallInteger("type")->default(1); //only 1 tetap/ 0tidak tetap $table->string("document")->nullable(); $table->foreignId("user_id")->constrained(); - $table->foreignId("company_id")->constrained(); // ? // $table->string("group")->nullable(); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index bd8ddea..b2d878d 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -4,9 +4,16 @@ namespace Database\Seeders; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; +use App\Models\Category; +use App\Models\Company; use App\Models\Department; +use App\Models\Group; use App\Models\Permission; +use App\Models\Region; +use App\Models\Role; +use App\Models\RolePermission; use App\Models\Setting; +use App\Models\Type; use App\Models\TypeDoc; use App\Models\User; use Illuminate\Database\Seeder; @@ -41,6 +48,8 @@ class DatabaseSeeder extends Seeder ['name' => 'update-document', 'label' => 'Edit Dokumen'], ['name' => 'create-document', 'label' => 'Buat Dokumen'], ['name' => 'delete-document', 'label' => 'Hapus Dokumen'], + ['name' => 'import-document', 'label' => 'Import Dokumen'], + ['name' => 'export-document', 'label' => 'Export Dokumen'], ['name' => 'view-category', 'label' => 'Lihat Kategori'], ['name' => 'update-category', 'label' => 'Edit Kategori'], ['name' => 'create-category', 'label' => 'Buat Kategori'], @@ -86,9 +95,80 @@ class DatabaseSeeder extends Seeder 'is_admin' => 1, // admin user ]); + + Type::create(['name' => 'Type 1']); + Category::create(['name' => 'Category 1', 'short' => 'C1', 'duration' => 3]); + Setting::create([ 'key' => 'DESTINATION_MAIL', 'value' => 'aji19kamaludin@gmail.com' ]); + + // role + $role = Role::create(['name' => 'admin']); + + $permissions = Permission::all()->map(function ($item) use($role) { + return [ + 'role_id' => $role->id, + 'permission_id' => $item->id, + ]; + })->toArray(); + RolePermission::insert($permissions); + + // 1 + $group = Group::create(['name' => 'G1']); + $region = Region::create([ + 'group_id' => $group->id, + 'name' => 'R1' + ]); + + Company::create([ + 'region_id' => $region->id, + 'name' => 'Company 1', + 'short' => 'C1', + ]); + + Company::create([ + 'region_id' => $region->id, + 'name' => 'Company 2', + 'short' => 'C2', + ]); + + User::create([ + 'name' => 'User Administrator', + 'email' => 'user@admin.com', + 'password' => bcrypt('password'), + 'is_admin' => 0, // admin user, + 'role_id' => $role->id, + 'region_id' => $region->id + ]); + + // 2 + $group = Group::create(['name' => 'G2']); + $region = Region::create([ + 'group_id' => $group->id, + 'name' => 'R2' + ]); + + Company::create([ + 'region_id' => $region->id, + 'name' => 'Company 3', + 'short' => 'C3', + ]); + + Company::create([ + 'region_id' => $region->id, + 'name' => 'Company 4', + 'short' => 'C4', + ]); + + User::create([ + 'name' => 'User2 Administrator', + 'email' => 'user2@admin.com', + 'password' => bcrypt('password'), + 'is_admin' => 0, // admin user, + 'role_id' => $role->id, + 'region_id' => $region->id + ]); } } diff --git a/resources/js/Pages/Dashboard.jsx b/resources/js/Pages/Dashboard.jsx index 10ffa22..f067020 100644 --- a/resources/js/Pages/Dashboard.jsx +++ b/resources/js/Pages/Dashboard.jsx @@ -1,34 +1,11 @@ import React from 'react'; import "@fullcalendar/react/dist/vdom"; -import FullCalendar from '@fullcalendar/react' // must go before plugins -import dayGridPlugin from '@fullcalendar/daygrid' // a plugin! -import interactionPlugin from "@fullcalendar/interaction" // needed for dayClick import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'; -import { Head } from '@inertiajs/react'; -import { router } from '@inertiajs/react' +import { Head,Link } from '@inertiajs/react'; export default function Dashboard(props) { - const { count_active, count_update, count_expired, count_total, events } = props - - // const calenderEvents = events.map(e => { - // return { - // title: `${e.document.type.name} - ${e.document.name}`, - // date: e.date, - // id : e.id, - // url: route('docs.show', e.document) - // } - // }) - - const handleEventClick = (arg) => { - // console.log(arg.event) - } - - const handleDateClick = (arg) => { // bind with an arrow function - // apa yang harus di handle: tampilkan saja modal yang ada event pada date ini kemudian bisa tambah reminder atau hapus reminder pada data ini, - // untuk tambah reminder pilih form doc id saja kemudian tambah , untuk delete cukup confirm kemudian hilang - alert(arg.dateStr) - } + const { count_active, count_update } = props return (
Dokumen Mendekati Jatuh Tempo
-
{count_active}
+ {count_active}
Dokumen Jatuh Tempo
-
{count_update}
-
-
- {/*
-
-
Dokumen Berakhir
-
{count_expired}
+ {count_update}
-
-
-
Total Dokumen
-
{count_total}
-
-
*/} - {/*
- -
*/}
); } diff --git a/resources/js/Pages/Document/Detail.jsx b/resources/js/Pages/Document/Detail.jsx index ebe9a91..dfb9631 100644 --- a/resources/js/Pages/Document/Detail.jsx +++ b/resources/js/Pages/Document/Detail.jsx @@ -8,7 +8,6 @@ import TextInput from '@/Components/TextInput' import { formatDate } from '@/utils' import { useModalState } from '@/Hooks' - export default function FormDocument(props) { const { doc, doc_url }= props @@ -27,23 +26,34 @@ export default function FormDocument(props) {

Dokumen

+
+ + +
- +
-
+
-
+
-
+
-
- - -
diff --git a/resources/js/Pages/Document/Form.jsx b/resources/js/Pages/Document/Form.jsx index bd8048f..e545a0e 100644 --- a/resources/js/Pages/Document/Form.jsx +++ b/resources/js/Pages/Document/Form.jsx @@ -11,13 +11,11 @@ import InputFile from '@/Components/InputFile' export default function FormDocument(props) { const inputDocument = useRef() - const { types, categories, doc }= props - const { props: {auth: { user }} } = usePage() + const { types, categories, companies, doc }= props const { data, setData, post, processing, errors } = useForm({ no_doc: '', name: '', - company_name: '', type_id: '', category_id: '', publisher: '', @@ -26,8 +24,7 @@ export default function FormDocument(props) { due_date: '', status: 0, type: 0, - group: user.group, - region: user.region, + company_id: '', document: null, document_name: '', }); @@ -37,7 +34,6 @@ export default function FormDocument(props) { setData({ no_doc: doc.no_doc, name: doc.name, - company_name: doc.company_name, type_id: doc.type_id, category_id: doc.category_id, publisher: doc.publisher, @@ -46,8 +42,7 @@ export default function FormDocument(props) { due_date: doc.due_date, status: doc.status, type: doc.type, - group: doc.group, - region: doc.region, + company_id: doc.company_id, document: null, document_name: doc.document, }) @@ -87,32 +82,6 @@ export default function FormDocument(props) {

Dokumen

-
- - - -
-
- - - -
+ + {companies.map(company => ( + + ))} + + +
-
- - - -
diff --git a/resources/js/Pages/Document/Index.jsx b/resources/js/Pages/Document/Index.jsx index e5e35dc..8533471 100644 --- a/resources/js/Pages/Document/Index.jsx +++ b/resources/js/Pages/Document/Index.jsx @@ -12,10 +12,9 @@ import { IconMenu } from '@/Icons' import { formatDate, hasPermission } from '@/utils' export default function Document(props) { - const { types, departments } = props const { data: docs, links } = props.docs - const [search, setSearch] = useState({q: ''}) + const [search, setSearch] = useState({q: '', status: 0}) const preValue = usePrevious(search) const confirmModal = useModalState(false) @@ -64,6 +63,8 @@ export default function Document(props) { const canCreate = hasPermission('create-document', props.auth.user) const canUpdate = hasPermission('update-document', props.auth.user) const canDelete = hasPermission('delete-document', props.auth.user) + const canImport = hasPermission('import-document', props.auth.user) + const canExport = hasPermission('export-document', props.auth.user) return (
+
{canCreate && ( )} -
+ {canImport && ( +
+ Import +
+ )} +
+
+
+
+ +
    +
  • handleFilter({status: 0})}>Semua
  • +
  • handleFilter({status: 1})}>Jatuh Tempo
  • +
  • handleFilter({status: 2})}>Mendekati Jatuh Tempo
  • +
+
+ {canExport && ( +
+ + +
+ )} +
diff --git a/resources/js/Pages/User/Index.jsx b/resources/js/Pages/User/Index.jsx index 4aaa78f..0df743e 100644 --- a/resources/js/Pages/User/Index.jsx +++ b/resources/js/Pages/User/Index.jsx @@ -108,8 +108,8 @@ export default function Users(props) { {user.name} {user.email} {user?.role?.name} - {user.group} - {user.region} + {user?.region?.group?.name} + {user?.region?.name} {canUpdate && (
{} , user = null } = props - const { props: { roles }} = usePage() + const { props: { roles, regions }} = usePage() const { data, setData, post, put, processing, errors, reset, clearErrors } = useForm({ name: '', @@ -12,8 +12,7 @@ export default function UserFormModal(props) { password: '', role_id: '', is_admin: '0', - group: '', - region: '' + region_id: '' }) const handleOnChange = (event) => { @@ -58,8 +57,7 @@ export default function UserFormModal(props) { email: user?.email, role_id: user?.role_id, is_admin: user?.is_admin, - group: user?.group, - region: user?.region + region_id: user?.region_id }) }, [user]) @@ -135,43 +133,31 @@ export default function UserFormModal(props) {
-
- - - -
-
- - - -
{(user === null || +user?.is_admin === 0) && ( + <> +
+ + + +
+ )}
group(function () { Route::delete('/docs/{doc}', [DocumentController::class, 'destroy'])->name('docs.destroy'); Route::get('/docs/{doc}', [DocumentController::class, 'edit'])->name('docs.edit'); Route::post('/docs/{doc}', [DocumentController::class, 'update'])->name('docs.update'); - Route::post('/docs/{doc}', [DocumentController::class, 'show'])->name('docs.show'); + Route::get('/docs/{doc}/show', [DocumentController::class, 'show'])->name('docs.show'); Route::get('/notification/{notification}', [NotificationController::class, 'redirect'])->name('notification.redirect');