Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Noorindria Mayrien Nariswari
PBL-Diskominfo
Commits
642ccb64
Commit
642ccb64
authored
1 year ago
by
Sekar Auvril Liura Ariesta
Browse files
Options
Download
Email Patches
Plain Diff
crud dataorganisasi
link ke profile relawan masih error karena id
parent
804bb452
No related merge requests found
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
PBL/app/Http/Controllers/Admin/DataOrganisasiController.php
+275
-0
PBL/app/Http/Controllers/Admin/DataOrganisasiController.php
PBL/app/Models/Relawan.php
+35
-3
PBL/app/Models/Relawan.php
PBL/app/Models/User.php
+6
-1
PBL/app/Models/User.php
PBL/database/migrations/2024_04_20_192153_create_relawans_table.php
+2
-2
...se/migrations/2024_04_20_192153_create_relawans_table.php
PBL/database/seeders/RolePermissionSeeder.php
+3
-0
PBL/database/seeders/RolePermissionSeeder.php
PBL/resources/views/admin/dataorganisasi/create.blade.php
+4
-3
PBL/resources/views/admin/dataorganisasi/create.blade.php
PBL/resources/views/admin/dataorganisasi/edit.blade.php
+331
-0
PBL/resources/views/admin/dataorganisasi/edit.blade.php
PBL/resources/views/admin/dataorganisasi/index-actions.blade.php
+4
-4
...ources/views/admin/dataorganisasi/index-actions.blade.php
PBL/resources/views/admin/dataorganisasi/index.blade.php
+55
-24
PBL/resources/views/admin/dataorganisasi/index.blade.php
PBL/routes/web.php
+6
-1
PBL/routes/web.php
with
721 additions
and
38 deletions
+721
-38
PBL/app/Http/Controllers/Admin/DataOrganisasiController.php
View file @
642ccb64
...
...
@@ -3,13 +3,288 @@
namespace
App\Http\Controllers\Admin
;
use
App\Http\Controllers\Controller
;
use
App\Models\Relawan
;
use
App\Models\User
;
use
Illuminate\Http\Request
;
use
Illuminate\Support\Facades\DB
;
use
Illuminate\Support\Facades\Gate
;
use
Illuminate\Support\Facades\Hash
;
use
RealRashid\SweetAlert\Facades\Alert
;
use
Spatie\Permission\Models\Role
;
use
Yajra\DataTables\Facades\DataTables
;
class
DataOrganisasiController
extends
Controller
{
//
public
function
source
(
Request
$request
)
{
Gate
::
authorize
(
'read dataorganisasi'
);
$user
=
$request
->
user
();
// Query relawans dengan join ke tabel users
$query
=
Relawan
::
query
()
->
join
(
'users'
,
'relawans.user_id'
,
'='
,
'users.id'
)
->
select
(
'relawans.*'
,
'users.email'
,
'users.name as nama_organisasi'
)
// Menggunakan alias untuk konsistensi
->
with
(
'roles'
);
// Menambahkan query dengan data yang terhapus jika user adalah superadmin
if
(
$user
->
hasRole
(
'superadmin'
))
{
$query
->
withTrashed
();
}
// Mengatur urutan sorting berdasarkan input dari request
$order
=
$request
->
order
;
if
(
is_array
(
$order
)
&&
count
(
$order
))
{
$sortBy
=
$order
[
0
][
'column'
]
??
null
;
$sort
=
$order
[
0
][
'dir'
]
??
null
;
if
(
$sortBy
==
0
)
{
// Sorting by nama_organisasi
$query
->
orderBy
(
'users.name'
,
$sort
==
'asc'
?
'asc'
:
'desc'
);
}
else
if
(
$sortBy
==
1
)
{
// Sorting by email
$query
->
orderBy
(
'users.email'
,
$sort
==
'asc'
?
'asc'
:
'desc'
);
}
else
if
(
$sortBy
==
2
)
{
// Sorting by nohp
$query
->
orderBy
(
'relawans.nohp'
,
$sort
==
'asc'
?
'asc'
:
'desc'
);
}
else
{
// Default sorting by created_at
$query
->
orderBy
(
'relawans.created_at'
,
'desc'
);
}
}
return
DataTables
::
eloquent
(
$query
)
->
filter
(
function
(
$query
)
{
if
(
$search
=
request
()
->
input
(
'search.value'
))
{
$query
->
where
(
function
(
$query
)
use
(
$search
)
{
$query
->
where
(
'users.name'
,
'like'
,
"%"
.
$search
.
"%"
)
->
orWhere
(
'users.email'
,
'like'
,
"%"
.
$search
.
"%"
)
->
orWhere
(
'relawans.nohp'
,
'like'
,
"%"
.
$search
.
"%"
)
->
orWhere
(
'relawans.nama_organisasi'
,
'like'
,
"%"
.
$search
.
"%"
);
});
}
})
->
editColumn
(
'email'
,
function
(
$item
)
{
return
!
$item
->
email
?
'-'
:
'<a href="mailto:'
.
$item
->
email
.
'" target="_blank">'
.
$item
->
email
.
'</a>'
;
})
->
editColumn
(
'nama_organisasi'
,
function
(
$item
)
{
return
$item
->
nama_organisasi
;
// Menggunakan alias untuk konsistensi
})
->
editColumn
(
'role'
,
function
(
$item
)
{
$role
=
$item
->
roles
->
first
();
return
!
$role
?
'-'
:
$role
->
name
;
})
->
addIndexColumn
()
->
addColumn
(
'action'
,
function
(
$item
)
{
return
'<a href="'
.
route
(
'admin.profil-relawan.index'
)
.
'" style="background-color: #605bff;" class="btn btn-primary">CEK PROFILE</a>'
;
})
->
rawColumns
([
'action'
,
'email'
])
->
toJson
();
}
public
function
index
()
{
Gate
::
authorize
(
'read dataorganisasi'
);
return
view
(
'admin.dataorganisasi.index'
);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public
function
create
()
{
Gate
::
authorize
(
'create dataorganisasi'
);
$roles
=
Role
::
get
();
$relawan
=
new
Relawan
();
return
view
(
'admin.dataorganisasi.create'
,
compact
(
'relawan'
,
'roles'
));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public
function
store
(
Request
$request
)
{
Gate
::
authorize
(
'create dataorganisasi'
);
$request
->
validate
([
'name'
=>
'required|string'
,
'email'
=>
'required|email|unique:users,email'
,
'password'
=>
'required|string|min:6|confirmed'
,
'alamat'
=>
'required|string'
,
'keahlian'
=>
'required|string'
,
'nohp'
=>
'required|string|unique:relawans,nohp'
,
'jumlah_relawan'
=>
'required|integer'
,
]);
DB
::
beginTransaction
();
try
{
$user
=
User
::
create
([
'name'
=>
$request
->
name
,
'email'
=>
$request
->
email
,
'password'
=>
Hash
::
make
(
$request
->
password
),
'created_by'
=>
$request
->
user
()
->
id
,
]);
$relawan
=
Relawan
::
create
([
'user_id'
=>
$user
->
id
,
'nama_organisasi'
=>
$request
->
name
,
'alamat'
=>
$request
->
alamat
,
'keahlian'
=>
$request
->
keahlian
,
'nohp'
=>
$request
->
nohp
,
'jumlah_relawan'
=>
$request
->
jumlah_relawan
,
'created_by'
=>
$request
->
user
()
->
id
,
]);
if
(
$request
->
role_id
&&
$role
=
Role
::
find
(
$request
->
role_id
))
{
$user
->
assignRole
(
$role
);
}
DB
::
commit
();
Alert
::
success
(
'Success'
,
'User relawan berhasil disimpan'
);
return
redirect
()
->
route
(
'admin.dataorganisasi.index'
);
}
catch
(
\
Exception
$e
)
{
DB
::
rollback
();
return
redirect
()
->
back
()
->
with
(
'error-message'
,
$e
->
getMessage
())
->
withInput
();
}
}
/**
* Display the specified resource.
*
* @param \App\Models\Relawan $relawan
* @return \Illuminate\Http\Response
*/
public
function
show
(
Relawan
$relawan
)
{
Gate
::
authorize
(
'denied'
);
// return view('admin.dataorganisasi.show', compact('relawan'));
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Relawan $relawan
* @return \Illuminate\Http\Response
*/
public
function
edit
(
Relawan
$relawan
)
{
Gate
::
authorize
(
'update dataorganisasi'
);
$relawan
->
load
(
'roles'
);
$relawan
->
load
(
'user'
);
$roles
=
Role
::
get
();
return
view
(
'admin.dataorganisasi.edit'
,
compact
(
'relawan'
,
'roles'
));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Relawan $relawan
* @return \Illuminate\Http\Response
*/
public
function
update
(
Request
$request
,
Relawan
$relawan
)
{
Gate
::
authorize
(
'update dataorganisasi'
);
$request
->
validate
([
'name'
=>
'required|string'
,
'email'
=>
'required|email|unique:users,email,'
.
$relawan
->
user
->
id
,
'password'
=>
'nullable|string|min:6|confirmed'
,
'alamat'
=>
'required|string'
,
'keahlian'
=>
'required|string'
,
'nohp'
=>
'required|string|unique:relawans,nohp,'
.
$relawan
->
id
,
'jumlah_relawan'
=>
'required|integer'
,
]);
DB
::
beginTransaction
();
try
{
$userData
=
[
'name'
=>
$request
->
name
,
'email'
=>
$request
->
email
,
];
if
(
$request
->
has
(
'password'
)
&&
!
empty
(
$request
->
password
))
{
$userData
[
'password'
]
=
Hash
::
make
(
$request
->
password
);
}
$relawan
->
user
->
update
(
$userData
);
$relawan
->
update
([
'nama_organisasi'
=>
$request
->
name
,
'alamat'
=>
$request
->
alamat
,
'keahlian'
=>
$request
->
keahlian
,
'nohp'
=>
$request
->
nohp
,
'jumlah_relawan'
=>
$request
->
jumlah_relawan
,
]);
if
(
$request
->
role_id
&&
$role
=
Role
::
find
(
$request
->
role_id
))
{
$relawan
->
user
->
syncRoles
([
$role
->
name
]);
}
DB
::
commit
();
Alert
::
success
(
'Success'
,
'User relawan berhasil diupdate'
);
return
redirect
()
->
route
(
'admin.dataorganisasi.edit'
,
$relawan
->
id
);
}
catch
(
\
Exception
$e
)
{
DB
::
rollback
();
return
redirect
()
->
back
()
->
with
(
'error-message'
,
$e
->
getMessage
())
->
withInput
();
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\User $user
* @return \Illuminate\Http\Response
*/
public
function
destroy
(
Request
$request
,
$id
)
{
Gate
::
authorize
(
'delete dataorganisasi'
);
$query
=
Relawan
::
query
();
if
(
$isSuperadmin
=
$request
->
user
()
->
hasRole
(
'superadmin'
))
{
$query
->
withTrashed
();
}
$user
=
$query
->
findOrFail
(
$id
);
if
(
$request
->
restore
==
'1'
&&
$isSuperadmin
)
{
$user
->
forceFill
([
'deleted_at'
=>
null
])
->
save
();
}
else
{
$user
->
delete
();
}
if
(
$request
->
ajax
())
{
return
response
()
->
json
([
'success'
=>
true
]);
}
Alert
::
success
(
'Success'
,
'User PIC berhasil di hapus'
);
return
redirect
()
->
route
(
'admin.user.index'
);
}
}
This diff is collapsed.
Click to expand it.
PBL/app/Models/Relawan.php
View file @
642ccb64
...
...
@@ -4,13 +4,24 @@ namespace App\Models;
use
Illuminate\Database\Eloquent\Factories\HasFactory
;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Database\Eloquent\SoftDeletes
;
use
Illuminate\Notifications\Notifiable
;
use
Laravel\Sanctum\HasApiTokens
;
use
Spatie\Permission\Traits\HasRoles
;
class
Relawan
extends
Model
{
use
HasFactory
;
use
\
Laravel\Sanctum\HasApiTokens
,
HasFactory
,
Notifiable
,
SoftDeletes
,
\
Spatie\Permission\Traits\HasRoles
;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected
$fillable
=
[
'nama_organisasi'
,
'user_id'
,
// 'nama_organisasi',
'alamat'
,
'jumlah_relawan'
,
'keahlian'
,
...
...
@@ -22,4 +33,25 @@ class Relawan extends Model
public
function
creator
()
{
return
$this
->
belongsTo
(
User
::
class
,
'created_by'
);
}
public
function
user
()
{
return
$this
->
belongsTo
(
User
::
class
,
'user_id'
);
}
public
function
getNamaOrganisasiAttribute
()
{
return
$this
->
user
->
name
;
}
public
function
getIsAdminAttribute
()
{
return
$this
->
roles
()
->
count
()
>
0
;
}
public
function
can
(
$abilities
,
$arguments
=
[])
{
$permissions
=
!
is_array
(
$abilities
)
?
[
$abilities
]
:
$abilities
;
return
$this
->
getPermissionsViaRoles
()
->
whereIn
(
'name'
,
$permissions
)
->
count
()
>
0
;
}
}
This diff is collapsed.
Click to expand it.
PBL/app/Models/User.php
View file @
642ccb64
...
...
@@ -12,7 +12,7 @@ use Spatie\Permission\Traits\HasRoles;
class
User
extends
Authenticatable
{
use
\
Laravel\Sanctum\
HasApiTokens
,
HasFactory
,
Notifiable
,
SoftDeletes
,
\
Spatie\Permission\Traits\
HasRoles
;
use
HasApiTokens
,
HasFactory
,
Notifiable
,
SoftDeletes
,
HasRoles
;
/**
* The attributes that are mass assignable.
...
...
@@ -61,4 +61,9 @@ class User extends Authenticatable
return
$this
->
getPermissionsViaRoles
()
->
whereIn
(
'name'
,
$permissions
)
->
count
()
>
0
;
}
public
function
relawans
()
{
return
$this
->
hasMany
(
Relawan
::
class
);
}
}
This diff is collapsed.
Click to expand it.
PBL/database/migrations/2024_04_20_192153_create_relawans_table.php
View file @
642ccb64
...
...
@@ -13,7 +13,8 @@ return new class extends Migration
{
Schema
::
create
(
'relawans'
,
function
(
Blueprint
$table
)
{
$table
->
id
();
$table
->
string
(
'nama_organisasi'
);
$table
->
foreignId
(
'user_id'
)
->
constrained
(
'users'
)
->
onDelete
(
'cascade'
);
// $table->string('nama_organisasi')->nullable();
$table
->
unsignedBigInteger
(
'jumlah_relawan'
)
->
nullable
();
$table
->
text
(
'alamat'
);
$table
->
text
(
'keahlian'
);
//nanti mau ku jadiin enum
...
...
@@ -22,7 +23,6 @@ return new class extends Migration
$table
->
timestamps
();
$table
->
softDeletes
();
$table
->
foreign
(
'created_by'
)
->
references
(
'id'
)
->
on
(
'users'
);
});
}
...
...
This diff is collapsed.
Click to expand it.
PBL/database/seeders/RolePermissionSeeder.php
View file @
642ccb64
...
...
@@ -52,6 +52,8 @@ class RolePermissionSeeder extends Seeder
'read reports'
,
'delete reports'
,
'create dataorganisasi'
,
'read dataorganisasi'
,
'update dataorganisasi'
,
'delete dataorganisasi'
,
...
...
@@ -59,6 +61,7 @@ class RolePermissionSeeder extends Seeder
'relawan'
=>
[
// Permissions for volunteer role...
'read dataorganisasi'
,
'update dataorganisasi'
,
'read profilRelawan'
,
'create profilRelawan'
,
'update profilRelawan'
,
'delete profilRelawan'
,
'read reports'
,
...
...
This diff is collapsed.
Click to expand it.
PBL/resources/views/admin/dataorganisasi/create.blade.php
View file @
642ccb64
@
extends
(
'layouts.app'
)
@
section
(
'header.icon.name'
,
'petir'
)
@
section
(
'header.title'
,
'Laporan Kejadian Bencana'
)
@
section
(
'header.icon.name'
,
'users'
)
@
section
(
'header.title'
,
'Buat Akun Relawan'
)
@
section
(
'header.description'
,
''
)
@
section
(
'content'
)
@
include
(
'admin.
reports
.edit'
,
[
'
sarpras
'
=>
new
\
App\Models\Re
port
])
@
include
(
'admin.
dataorganisasi
.edit'
,
[
'
relawan
'
=>
new
\
App\Models\Re
lawan
,
'user'
=>
new
\
App\Models\User
])
@
endsection
\ No newline at end of file
This diff is collapsed.
Click to expand it.
PBL/resources/views/admin/dataorganisasi/edit.blade.php
View file @
642ccb64
@
extends
(
'layouts.app'
)
@
section
(
'header.icon.name'
,
'users'
)
{{
--
@
section
(
'header.title'
,
'Edit Akun Relawan'
.
' - '
.
$relawan
->
nama_organisasi
)
--
}}
@
section
(
'header.title'
,
$relawan
->
exists
?
'Edit Akun Relawan - '
.
$relawan
->
nama_organisasi
:
'Buat Akun Relawan Baru'
)
@
section
(
'header.description'
,
''
)
@
php
// $userRoles = !$relawan->user->id ? collect([]) : $relawan->user->roles;
$userRoles
=
$user
->
id
?
$user
->
roles
:
collect
([]);
@
endphp
@
section
(
'content'
)
{{
--
<
form
action
=
"{{ !
$relawan->user
->id ? route('admin.dataorganisasi.store') : route('admin.dataorganisasi.update',
$relawan->user
->id) }}"
method
=
"POST"
enctype
=
"multipart/form-data"
id
=
"modelForm"
autocomplete
=
"off"
>
@
csrf
@
method
(
!
$relawan
->
user
->
id
?
'POST'
:
'PUT'
)
<
input
type
=
"hidden"
name
=
"user_id"
id
=
"user_id"
value
=
"{{
$relawan->user
->id }}"
/>
--
}}
<
form
action
=
"{{
$relawan->exists
? route('admin.dataorganisasi.update',
$relawan->id
) : route('admin.dataorganisasi.store') }}"
method
=
"POST"
enctype
=
"multipart/form-data"
id
=
"modelForm"
autocomplete
=
"off"
>
@
csrf
@
method
(
$relawan
->
exists
?
'PUT'
:
'POST'
)
<
input
type
=
"hidden"
name
=
"user_id"
id
=
"user_id"
value
=
"{{
$user->id
}}"
/>
<
div
class
=
"container-xl px-3 px-md-4 mb-4"
>
<
div
class
=
"row gy-3"
>
<
div
class
=
"col-xl-8"
>
<!--
Account
details
card
-->
<
div
class
=
"card"
>
<
div
class
=
"card-header"
>
<
div
class
=
"row gy-2 align-items-center"
>
<
div
class
=
"col-12 col-lg"
>
<
h5
class
=
"text-dark mb-0"
>
{{
--
{{
!
$relawan
->
user
->
id
?
"Buat Akun Relawan Baru"
:
"Edit Akun Relawan"
}}
--
}}
{{
$relawan
->
exists
?
"Edit Akun Relawan"
:
"Buat Akun Relawan Baru"
}}
</
h5
>
</
div
>
{{
--
@
if
(
$creator
=
$relawan
->
user
->
creator
)
--
}}
@
if
(
$creator
=
$user
->
creator
)
<
div
class
=
"col-auto"
>
<
p
class
=
"mb-0 text-xs text-muted"
>
{{
--
<
em
>
Pembaruan
terakhir
{{
$relawan
->
user
->
updated_at
?->
translatedFormat
(
'j F Y H:i'
)
}}
oleh
{{
$creator
->
name
}}
</
em
>
--
}}
<
em
>
Pembaruan
terakhir
{{
$user
->
updated_at
?->
translatedFormat
(
'j F Y H:i'
)
}}
oleh
{{
$creator
->
name
}}
</
em
>
</
p
>
</
div
>
@
endif
</
div
>
</
div
>
<
div
class
=
"card-body"
>
<!--
Form
Group
(
username
)
-->
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"name"
>
Nama
Organisasi
</
label
>
<
input
class
=
"form-control"
name
=
"name"
id
=
"name"
type
=
"text"
placeholder
=
"Nama Organisasi"
{{
--
value
=
"{{ old('name',
$relawan->user
->name) }}"
--
}}
value
=
"{{ old('name',
$relawan->exists
?
$relawan->user
->name : '') }}"
required
/>
@
if
(
$errors
->
has
(
'name'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'name'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"email"
>
Email
</
label
>
<
input
class
=
"form-control"
name
=
"email"
id
=
"email"
type
=
"text"
placeholder
=
"Alamat Email"
{{
--
value
=
"{{ old('email',
$relawan->user
->email) }}"
--
}}
value
=
"{{ old('email',
$relawan->exists
?
$relawan->user
->email : '') }}"
required
/>
@
if
(
$errors
->
has
(
'email'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'email'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"password"
>
Password
</
label
>
<
input
class
=
"form-control"
name
=
"password"
id
=
"password"
type
=
"password"
placeholder
=
"Password"
{{
--
value
=
"{{ old('password') }}"
{
!!
!
$relawan
->
user
->
id
?
'required'
:
''
!!
}
--
}}
value
=
"{{ old('password') }}"
{
!!
!
$relawan
->
exists
?
'required'
:
''
!!
}
/>
@
if
(
$errors
->
has
(
'password'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'password'
)
}}
</
span
>
@
endif
{{
--
@
if
(
$relawan
->
user
->
id
)
--
}}
@
if
(
$relawan
->
exists
)
<
p
class
=
"text-xs text-muted mt-1"
>
<
i
class
=
"fa fa-info-circle me-1"
></
i
>
<
span
>
Biarkan
kosong
bila
tidak
mengubah
password
</
span
>
</
p
>
@
endif
</
div
>
{{
--
<
div
class
=
"form-group mb-3"
style
=
"display: {{ !
$relawan->user
->id ? 'block' : 'none' }}"
>
--
}}
<
div
class
=
"form-group mb-3"
style
=
"display: {{ !
$relawan->exists
? 'block' : 'none' }}"
>
<
label
class
=
"small mb-1"
for
=
"password_confirmation"
>
Konfirmasi
Password
</
label
>
<
input
class
=
"form-control"
name
=
"password_confirmation"
id
=
"password_confirmation"
type
=
"password"
placeholder
=
"Konfirmasi Password"
{{
--
value
=
"{{ old('password_confirmation') }}"
{
!!
!
$relawan
->
user
->
id
?
'required'
:
''
!!
}
--
}}
value
=
"{{ old('password_confirmation') }}"
{
!!
!
$relawan
->
exists
?
'required'
:
''
!!
}
/>
@
if
(
$errors
->
has
(
'password_confirmation'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'password_confirmation'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"form-group mb-3"
>
<
label
class
=
"small mb-1"
for
=
"role_id"
>
Role
</
label
>
<
select
class
=
"form-control field-select2 {{
$errors->has
('role_id') ? 'is-invalid' : '' }}"
name
=
"role_id"
id
=
"role_id"
required
data
-
placeholder
=
"Pilih Role"
style
=
"width : 100%"
>
<
option
></
option
>
@
foreach
(
$roles
as
$role
)
<
option
value
=
"{{
$role->id
}}"
{{
old
(
'role_id'
,
''
)
==
$role
->
id
?
' selected'
:
''
}}
{{
$userRoles
->
where
(
'id'
,
$role
->
id
)
->
first
()
?
' selected'
:
''
}}
>
{{
$role
->
name
}}
</
option
>
@
endforeach
</
select
>
@
if
(
$errors
->
has
(
'role_id'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'role_id'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"alamat"
>
Alamat
/
Kantor
Organisasi
</
label
>
<
input
class
=
"form-control"
name
=
"alamat"
id
=
"alamat"
type
=
"text"
placeholder
=
"alamat"
value
=
"{{ old('alamat',
$relawan->alamat
) }}"
required
/>
@
if
(
$errors
->
has
(
'alamat'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'alamat'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"jumlah_relawan"
>
Jumlah
Relawan
</
label
>
<
input
class
=
"form-control field-numeral"
name
=
"jumlah_relawan"
id
=
"jumlah_relawan"
type
=
"text"
placeholder
=
"Jumlah relawan"
value
=
"{{ old('jumlah_relawan',
$relawan->jumlah_relawan
) }}"
required
data
-
format
=
"0,0[.]0"
/>
@
if
(
$errors
->
has
(
'jumlah_relawan'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'jumlah_relawan'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"keahlian"
>
Keahlian
</
label
>
<
input
class
=
"form-control"
name
=
"keahlian"
id
=
"keahlian"
type
=
"text"
placeholder
=
"keahlian"
value
=
"{{ old('keahlian',
$relawan->keahlian
) }}"
required
/>
@
if
(
$errors
->
has
(
'keahlian'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'keahlian'
)
}}
</
span
>
@
endif
</
div
>
<
div
class
=
"mb-3"
>
<
label
class
=
"small mb-1"
for
=
"nohp"
>
Nomor
Telepon
</
label
>
<
input
class
=
"form-control"
name
=
"nohp"
id
=
"nohp"
type
=
"text"
placeholder
=
"Nomor Telepon"
value
=
"{{ old('nohp',
$relawan->nohp
) }}"
required
/>
@
if
(
$errors
->
has
(
'nohp'
))
<
span
class
=
"text-danger text-xs"
>
{{
$errors
->
first
(
'nohp'
)
}}
</
span
>
@
endif
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
form
>
<
div
class
=
"position-sticky bottom-0 mt-auto bg-white shadow-lg"
>
<
div
class
=
"container-xl py-3"
>
<
div
class
=
"row justify-content-end align-items-center"
>
<
div
class
=
"col"
>
<
a
href
=
"{{ route('admin.dataorganisasi.index') }}"
class
=
"btn btn-light border border-gray-300"
>
Kembali
</
a
>
</
div
>
<
div
class
=
"col-auto"
>
{{
--
<
a
href
=
"{{ !
$relawan->user
->id ? route('admin.dataorganisasi.create') : route('admin.dataorganisasi.edit',
$relawan->user
->id) }}"
class
=
"btn btn-primary btn-model-submit"
>
Simpan
</
a
>
--
}}
<
button
type
=
"submit"
class
=
"btn btn-primary btn-model-submit"
>
Simpan
</
button
>
</
div
>
</
div
>
</
div
>
</
div
>
@
endsection
@
push
(
'js'
)
<
script
>
(
function
(
$
,
app
)
{
$
(
function
()
{
var
form
=
$
(
'form#modelForm'
);
var
user_id
=
form
.
find
(
'#user_id'
)
.
val
();
var
password
=
form
.
find
(
'#password'
);
var
passwordConfirm
=
form
.
find
(
'#password_confirmation'
);
$
(
'.btn-model-submit'
)
.
on
(
'click'
,
function
(
e
)
{
e
.
preventDefault
();
form
.
trigger
(
'submit'
);
});
form
.
on
(
'submit'
,
function
(
e
)
{
var
isValid
=
true
;
// Jika user_id tidak ada (saat create), validasi password harus lengkap
if
(
!
user_id
&&
(
!
password
.
val
()
||
!
passwordConfirm
.
val
()))
{
Swal
.
fire
({
icon
:
'error'
,
title
:
"Password Tidak Lengkap"
,
text
:
"Mohon lengkapi semua kolom password"
,
});
return
e
.
preventDefault
();
}
// Jika user_id ada (saat edit), validasi password jika diisi
if
(
user_id
&&
password
.
val
()
&&
password
.
val
()
!==
passwordConfirm
.
val
())
{
Swal
.
fire
({
icon
:
'error'
,
title
:
"Password Tidak Cocok"
,
text
:
"Password dan Konfirmasi Password harus sama."
,
});
return
e
.
preventDefault
();
}
});
password
.
on
(
'change keyup blur'
,
function
(
e
)
{
if
(
!
passwordConfirm
.
is
(
':visible'
)
&&
e
.
target
.
value
)
{
passwordConfirm
.
closest
(
'.form-group'
)
.
slideDown
();
}
});
})
// if ((!password.val() || !passwordConfirm.val()) && !user_id.val()) {
// Swal.fire({
// icon: 'error',
// title: "Password Tidak Lengkap",
// text: "Mohon lengkapi semua kolom password",
// });
// return e.preventDefault();
// }
// if (password.val() !== passwordConfirm.val() && passwordConfirm.is(':visible')) {
// Swal.fire({
// icon: 'error',
// title: "Password Tidak Cocok",
// text: "Password dan Konfirmasi Password harus sama.",
// });
// return e.preventDefault();
// }
// });
// password.on('change keyup blur', function(e) {
// if (!passwordConfirm.is(':visible') && e.target.value) {
// passwordConfirm.closest('.form-group').slideDown();
// }
// });
// })
})(
jQuery
,
window
.
APP
);
</
script
>
@
endpush
This diff is collapsed.
Click to expand it.
PBL/resources/views/admin/dataorganisasi/index-actions.blade.php
View file @
642ccb64
@
include
(
'partials.datatables.actions-toggle'
,
[
'read'
=>
'read
sarprases
'
,
'update'
=>
'update
sarprases
'
,
'delete'
=>
'delete
sarprases
'
,
'route'
=>
'
sarpr
as'
,
'read'
=>
'read
dataorganisasi
'
,
'update'
=>
'update
dataorganisasi
'
,
'delete'
=>
'delete
dataorganisasi
'
,
'route'
=>
'
dataorganis
as
i
'
,
'id'
=>
$id
,
])
This diff is collapsed.
Click to expand it.
PBL/resources/views/admin/dataorganisasi/index.blade.php
View file @
642ccb64
...
...
@@ -13,42 +13,38 @@
<
div
class
=
"col"
>
<
h4
class
=
"text-primary m-0 model-title"
>
Data
Organisasi
</
h4
>
</
div
>
<
div
class
=
"col-auto"
>
{{
--
<
div
class
=
"col-auto"
>
<
a
class
=
"btn btn-sm btn-success"
>
<
i
class
=
"me-1"
data
-
feather
=
"plus"
></
i
>
Edit
Data
Tambah
Relawan
</
a
>
</
div
>
--
}}
@
can
(
'create dataorganisasi'
)
<
div
class
=
"col-auto"
>
<
a
class
=
"btn btn-sm btn-success"
href
=
"{{ route('admin.dataorganisasi.create') }}"
>
<
i
class
=
"me-1"
data
-
feather
=
"plus"
></
i
>
Tambah
Relawan
Baru
</
a
>
</
div
>
@
endcan
</
div
>
</
div
>
<
div
class
=
"card-body"
>
<
div
class
=
"table-responsive"
>
<
table
class
=
"table table-hover"
>
<
div
class
=
"mw-100 overflow-auto"
>
<
table
class
=
"datatables-model"
id
=
"datatablesModel"
>
<
thead
>
<
tr
>
<
th
scope
=
"col"
>
Nama
</
th
>
<
th
scope
=
"col"
>
Action
</
th
>
<
th
>
Nama
Organisasi
</
th
>
<
th
>
Email
</
th
>
<
th
>
Nomor
Telepon
</
th
>
<
th
class
=
"text-center"
>
Action
</
th
>
</
tr
>
</
thead
>
<
tbody
>
<
tr
>
<
td
>
BASARNAS
</
td
>
<
td
>
<
a
href
=
"{{ route('admin.profil-relawan.index') }}"
style
=
"background-color: #605bff;"
class
=
"btn btn-primary"
>
CEK
PROFILE
</
a
>
</
td
>
</
tr
>
<
tr
>
<
td
>
PEMUDA
PANCASILA
</
td
>
<
td
>
<
a
href
=
"{{ route('admin.profil-relawan.index') }}"
style
=
"background-color: #605bff;"
class
=
"btn btn-primary"
>
CEK
PROFILE
</
a
>
</
td
>
</
tr
>
<
tr
>
<
td
>
PMI
</
td
>
<
td
>
<
a
href
=
"{{ route('admin.profil-relawan.index') }}"
style
=
"background-color: #605bff;"
class
=
"btn btn-primary"
>
CEK
PROFILE
</
a
>
</
td
>
</
tr
>
{{
--
DataTables
relawans
--
}}
</
tbody
>
</
table
>
</
div
>
...
...
@@ -58,3 +54,38 @@
@
endsection
@
push
(
'css'
)
<
link
rel
=
"stylesheet"
type
=
"text/css"
href
=
"//cdn.datatables.net/1.13.1/css/jquery.dataTables.min.css"
/>
@
endpush
@
push
(
'js'
)
<
script
src
=
"//cdn.datatables.net/1.13.1/js/jquery.dataTables.min.js"
></
script
>
<
script
src
=
"{{ asset('/js/admin-datatable.js') }}"
></
script
>
<
script
>
(
function
(
$
,
app
)
{
$
(
document
)
.
ready
(
function
()
{
$
(
'#datatablesModel'
)
.
DataTable
({
processing
:
true
,
serverSide
:
true
,
ajax
:
'{{ route("admin.dataorganisasi.source") }}'
,
columns
:
[
// { data: 'DT_RowIndex', width: '1%', orderable: false, searchable: false },
{
data
:
'nama_organisasi'
,
name
:
'users.name'
,
width
:
'15%'
},
// Menggunakan alias
{
data
:
'email'
,
name
:
'users.email'
,
width
:
'10%'
},
{
data
:
'nohp'
,
name
:
'relawans.nohp'
,
width
:
'10%'
,
orderable
:
false
,
searchable
:
false
},
{
data
:
'action'
,
name
:
'action'
,
width
:
'10%'
,
orderable
:
false
,
searchable
:
false
},
],
drawCallback
:
function
()
{
feather
.
replace
();
app
.
dataTable
.
bindDelete
();
app
.
dataTable
.
bindToggleVisible
();
},
});
}
);
})(
jQuery
,
window
.
APP
);
</
script
>
@
endpush
This diff is collapsed.
Click to expand it.
PBL/routes/web.php
View file @
642ccb64
...
...
@@ -76,10 +76,15 @@ Route::group([
// Route::resource('report', ReportzzzController::class);
Route
::
get
(
'/dataorganisasi'
,
'DataOrganisasiController@index'
)
->
name
(
'dataorganisasi'
);
// Route::get('/dataorganisasi', 'DataOrganisasiController@index')->name('dataorganisasi');
// Route::resource('dataorganisasi', 'DataOrganisasiController');
Route
::
get
(
'/dataorganisasi/source'
,
'DataOrganisasiController@source'
)
->
name
(
'dataorganisasi.source'
);
Route
::
resource
(
'dataorganisasi'
,
'DataOrganisasiController'
);
Route
::
get
(
'/profil-relawan'
,
'ProfilRelawanController@index'
)
->
name
(
'profil-relawan.index'
);
Route
::
get
(
'/profil-relawan/{id}/edit'
,
'ProfilRelawanController@edit'
)
->
name
(
'admin.profil-relawan.edit'
);
});
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help