Commit 642ccb64 authored by Sekar Auvril Liura Ariesta's avatar Sekar Auvril Liura Ariesta
Browse files

crud dataorganisasi

link ke profile relawan masih error karena id
parent 804bb452
No related merge requests found
Showing with 721 additions and 38 deletions
+721 -38
......@@ -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');
}
}
......@@ -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;
}
}
......@@ -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);
}
}
......@@ -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');
});
}
......
......@@ -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',
......
@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\Report])
@include('admin.dataorganisasi.edit', ['relawan' => new \App\Models\Relawan, 'user' => new \App\Models\User])
@endsection
\ No newline at end of file
@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
@include('partials.datatables.actions-toggle', [
'read' => 'read sarprases',
'update' => 'update sarprases',
'delete' => 'delete sarprases',
'route' => 'sarpras',
'read' => 'read dataorganisasi',
'update' => 'update dataorganisasi',
'delete' => 'delete dataorganisasi',
'route' => 'dataorganisasi',
'id' => $id,
])
......@@ -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
......@@ -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');
});
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment