perubahan datatable

This commit is contained in:
oktaviaramadani 2023-11-10 10:14:56 +07:00
commit 937caeb74d
10 changed files with 257 additions and 166 deletions

View File

@ -8,6 +8,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Throwable;
use Yajra\DataTables\DataTables;
class AdminSettingController extends Controller
{
@ -16,10 +17,7 @@ class AdminSettingController extends Controller
*/
public function index()
{
$settings = Setting::all();
return view('admin.setting.index', [
'settings' => $settings,
]);
return view('admin.setting.index');
}
/**
@ -85,4 +83,53 @@ class AdminSettingController extends Controller
}
}
}
public function listSetting(Request $request){
try{
$subQuery = Setting::latest()->select('id','bulan','tahun','persentase','status');
if($request->has('search') && !empty($request->search['value'])){
$searchSetting = $request->search['value'];
if (!is_numeric($searchSetting)) {
$subQuery->where(function($a) use ($searchSetting){
$a->whereRaw('LOWER(status) LIKE ?', ['%' . strtolower($searchSetting) . '%']);
});
} else {
$subQuery->where(function($a) use ($searchSetting){
$a->where('bulan',$searchSetting)
->orWhere('tahun',$searchSetting)
->orWhere('persentase',$searchSetting);
});
}
}
$querySetting = Setting::from(DB::raw("({$subQuery->toSql()}) as tmp"))
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
->select('*')
->get();
if($request->ajax()){
return DataTables::of($querySetting)
->addIndexColumn()
->addColumn('action', function($row){
$status = $row->status ? 'checked' : '';
$html_code = '<label class="switch">
<input type="checkbox" '.$status.'
data-id="'. $row->id.'">
<span class="slider round" data-on-text="Yes" data-off-text="No"
id="checkOnOf"></span>
</label>';
return $html_code;
})
->rawColumns(['action'])
->make(true);
}
}catch(Throwable $e){
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
}
}
}

View File

@ -49,4 +49,8 @@ class AdminTransactionController extends Controller
}
}
public function listTransaction(Request $request){
}
}

View File

@ -17,11 +17,7 @@ class AdminUserController extends Controller
*/
public function index()
{
$users = User::where('role', 'User')
->orderByRaw("CASE WHEN status = 'Progress' THEN 1 WHEN status = 'Finished' THEN 2 WHEN status = 'Rejected' THEN 3 ELSE 4 END ASC")
->latest()
->get();
return view('admin.users.index', ['users' => $users]);
return view('admin.users.index');
}
/**
@ -101,9 +97,10 @@ class AdminUserController extends Controller
if ($request->has('search') && !empty($request->search['value'])) {
$searchUser = $request->search['value'];
$subQuery->where(function ($a) use ($searchUser) {
$a->whereRaw('email LIKE ?', ['%' . $searchUser . '%'])
->orWhereRaw('nama_depan LIKE ?', ['%' . $searchUser . '%'])
->orWhereRaw('nama_belakang LIKE ?', ['%' . $searchUser . '%']);
$a->whereRaw('LOWER(email) LIKE ?', ['%' . strtolower($searchUser) . '%'])
->orWhereRaw('LOWER(nama_depan) LIKE ?', ['%' . strtolower($searchUser) . '%'])
->orWhereRaw('LOWER(nama_belakang) LIKE ?', ['%' . strtolower($searchUser) . '%'])
->orWhereRaw('LOWER(status) LIKE ?',['%'.strtolower($searchUser).'%']);
});
}

View File

@ -2,11 +2,13 @@
namespace App\Http\Controllers\User;
use Throwable;
use App\Models\User;
use App\Models\Contact;
use Illuminate\Http\Request;
use Yajra\DataTables\DataTables;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
@ -17,8 +19,7 @@ class UserContactController extends Controller
*/
public function index()
{
$contacts = Contact::where('pemilik_kontak', Auth::user()->email)->get();
return view('user.contact.index', ['contacts' => $contacts]);
return view('user.contact.index');
}
public function getContact()
@ -36,31 +37,40 @@ class UserContactController extends Controller
*/
public function store(Request $request)
{
$email_relasi = $request->input('email');
$email_relasi = $request->email;
if ($email_relasi == Auth::user()->email) {
return response()->json([
'status' => false,
'message' => 'Kontak yang ingin didaftarkan tidak boleh sama',
]);
} else {
$result = Contact::create([
}
try{
DB::beginTransaction();
Contact::create([
'pemilik_kontak' => Auth::user()->email,
'relasi_kontak' => $request->input('email'),
'relasi_kontak' => $email_relasi,
]);
if ($result) {
DB::commit();
return response()->json([
'status' => true,
'message' => 'Akun berhasil masuk ke kontak',
'message' => 'Kontak berhasil ditambahkan.'
]);
} else {
}catch(Throwable $e){
DB::rollBack();
Log::error($e->getMessage());
return response()->json([
'status' => false,
'message' => 'Akun gagal masuk ke kontak',
'message' => 'Terjadi error di bagian server atau kontak sudah didaftarkan',
]);
}
}
}
/**
* Remove the specified resource from storage.
@ -68,22 +78,25 @@ class UserContactController extends Controller
public function destroy($id)
{
try {
$result = Contact::destroy($id);
if ($result) {
DB::beginTransaction();
Contact::destroy($id);
DB::commit();
return response()->json([
'message' => 'Berhasil hapus data',
'status' => true,
]);
} else {
} catch (Throwable $e) {
DB::rollBack();
Log::error($e->getMessage());
return response()->json([
'message' => 'Gagal hapus data karena ' . $result,
'status' => false,
]);
}
} catch (\Exception $e) {
return response()->json([
'message' => 'Gagal hapus data, karena ' . $e,
'status' => false,
'message' => 'Terjadi error di bagian server.',
]);
}
}
@ -113,53 +126,60 @@ class UserContactController extends Controller
}
}
public function show($id)
{
$user = Contact::find($id);
return view('user.contact.modal-detail-contact', ['user' => $user]);
}
public function listContact(Request $request)
{
$subQuery = DB::table('contacts')
->leftJoin('users', 'contacts.user_id', '=', 'users.id')
->select('users.nama_depan');
public function listContact(Request $request){
try{
$subQuery = Contact::join('users','contacts.relasi_kontak','=','users.email')
->join('indonesia_villages','users.kode_kelurahan','=','indonesia_villages.code')
->join('indonesia_districts','indonesia_villages.district_code','=','indonesia_districts.code')
->join('indonesia_cities', 'indonesia_districts.city_code','=','indonesia_cities.code')
->join('indonesia_provinces','indonesia_cities.province_code','=','indonesia_provinces.code')
->where('pemilik_kontak', Auth::user()->email)
->select('contacts.id', 'users.email as email as email', 'users.nohp as nohp', 'users.alamat as alamat', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"),'indonesia_villages.name as kelurahan','indonesia_districts.name as kecamatan','indonesia_cities.name as kota','indonesia_provinces.name as provinsi');
if($request->has('search') && !empty($request->search['value'])){
$searchContact = $request->search['value'];
$subQuery->where(function($a) use ($searchContact){
$a->whereRaw('nama_depan LIKE ?', ['%' . $searchContact . '%']);
$a->whereRaw('LOWER(users.nama_depan) LIKE ?',['%'.strtolower($searchContact).'%'])
->orWhereRaw('LOWER(users.nama_belakang) LIKE ?',['%'.strtolower($searchContact).'%']);
});
}
$queryUser = Contact::from(DB::raw("({$subQuery->toSql()}) as tmp"))
$queryContact = Contact::from(DB::raw("({$subQuery->toSql()}) as tmp"))
->mergeBindings($subQuery->getQuery()) // Menggabungkan binding parameters
->select('*')
->get();
if($request->ajax()){
return DataTables::of($queryUser)
return DataTables::of($queryContact)
->addIndexColumn()
->addColumn('action', function ($user) {
$url = route('admin-contact.show', ['id' => $user->id]);
->addColumn('action', function($row){
$village = $row->kelurahan;
$city = $row->kota;
$district = $row->kecamatan;
$province = $row->provinsi;
$html_code = '
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Aksi
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="' . $url . '">Detail</a>
</li>
</ul>
</div>';
<button class="btn btn-info open-detail-modal" data-toggle="modal"
data-target="#modaldetail" id="detailContact"
data-nama="'.$row->nama_lengkap.'"
data-nohp="'.$row->nohp.'"
data-alamat="'.$row->alamat.'"
data-email="'.$row->email.'"
data-province="'.$province.'"
data-city="'.$city.'"
data-district="'.$district.'"
data-village="'.$village.'">Detail</button>
<button class="btn btn-danger open-detail-modal" id="deleteContact"
data-id="'.$row->id.'">Hapus</button>
';
return $html_code;
})
->rawColumns(['action'])
->make(true);
}
}catch(Throwable $e){
Log::error($e->getMessage());
return response()->json(['success' => false, 'message' => 'Terjadi Kesalahan pada sisi server']);
}
}
}

View File

@ -821,4 +821,8 @@ class UserTransactionController extends Controller
}
}
}
public function listTransaction(Request $request){
}
}

View File

@ -92,7 +92,7 @@ class DatabaseSeeder extends Seeder
'no_rek' => '01980921'
]);
// User::factory(20)->create();
User::factory(100)->create();
$now = Carbon::now()->tz('Asia/Jakarta');
$bulan = $now->format('n');

View File

@ -3,6 +3,43 @@
<script>
$(document).ready(function() {
let listSetting = $('#table-setting').DataTable({
processing: true,
serverSide: true,
ajax: "{{ route('admin-setting.list-setting') }}",
columns: [{
data: 'DT_RowIndex',
name: 'DT_RowIndex',
orderable: false,
searchable: false,
}, {
data: 'bulan',
name: 'bulan',
}, {
data: 'tahun',
name: 'tahun',
}, {
data: 'persentase',
name: 'persentase'
}, {
data: 'status',
render: function(data, type, row) {
if (row.status == 'Active') {
return `<div class="badge badge-success">${row.status}</div>`;
} else {
return `<div class="badge badge-danger">${row.status}</div>`;
}
},
orderable: true,
searchable: true
}, {
data: 'action',
name: 'action',
orderable: false,
searchable: false
}]
});
$("#bulan").select2();
$('#tambahModal').click(function() {
@ -56,15 +93,13 @@
confirmButtonText: 'OK',
position: 'center',
}).then(function() {
Swal.close();
if (response.status) {
location.reload();
Swal.close();
listSetting.ajax.reload();
}
console.log(response);
});
},
error: function(error) {
console.log(error.responseText)
var response = JSON.parse(error.responseText);
@ -87,9 +122,7 @@
}
});
const table = $('#table-5').DataTable(); // Inisialisasi DataTable
$('#table-5').on('change', '.switch input[type="checkbox"]', function() {
$('#table-setting').on('change', '.switch input[type="checkbox"]', function() {
const parentRow = $(this).closest('tr');
const csrfToken = $('meta[name="csrf-token"]').attr('content');
const statusBadge = parentRow.find('.badge');
@ -98,7 +131,7 @@
const isChecked = $(this).prop('checked');
let dataId = $(this).data("id");
const rowData = table.row(parentRow).data(); // Dapatkan data baris dari DataTable
const rowData = listSetting.row(parentRow).data(); // Dapatkan data baris dari DataTable
$.ajaxSetup({
headers: {
@ -120,7 +153,6 @@
confirmButtonText: 'OK'
}).then(function() {
if (isChecked) {
// location.reload();
statusBadge.text(onText === 'Yes' ? 'Active' :
'Nonactive');
statusBadge.removeClass('badge-danger').addClass(
@ -161,7 +193,7 @@
<a class="btn btn-success active" href="#" id="tambahModal">Tambah Data Kebijakan</a>
</div>
<div class="table-responsive">
<table class="table table-striped" id="table-5">
<table class="table table-striped" id="table-setting">
<thead>
<tr>
<th class="text-center">
@ -175,28 +207,7 @@
</tr>
</thead>
<tbody>
@foreach ($settings as $setting)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ DateTime::createFromFormat('n', $setting->bulan)->format('F') }}</td>
<td>{{ $setting->tahun }}</td>
<td>{{ $setting->persentase }}</td>
<td>
<div
class="badge {{ $setting->status == 'Active' ? 'badge-success' : 'badge-danger' }}">
{{ $setting->status }}
</div>
</td>
<td>
<label class="switch">
<input type="checkbox" @if ($setting->status === 'Active') checked @endif
data-id="{{ $setting->id }}">
<span class="slider round" data-on-text="Yes" data-off-text="No"
id="checkOnOf"></span>
</label>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>

View File

@ -46,7 +46,7 @@
data: 'DT_RowIndex',
name: 'DT_RowIndex',
orderable: false,
searchable: true,
searchable: false,
}, {
data: 'id',
name: 'id',
@ -86,7 +86,7 @@
return data;
}
}, {
data: null,
data: 'status',
render: function(data, type, row) {
if (row.status == 'Finished') {
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">${row.status}</a>`;

View File

@ -31,37 +31,18 @@
<th>Aksi</th>
</tr>
</thead>
{{-- <tbody>
@foreach ($contacts as $contact)
<tr>
<td>{{ $loop->iteration }}</td>
<td class="font-weight-600">
{{ $contact->relasiKontak->nama_depan . ' ' . $contact->relasiKontak->nama_belakang }}
</td>
<td class="text-center">
<button class="btn btn-info open-detail-modal" data-toggle="modal"
data-target="#modaldetail" id="detailContact"
data-id="{{ $contact->relasiKontak }}"
data-province="{{ $contact->relasiKontak->getProvinceName() }}"
data-city="{{ $contact->relasiKontak->getCityName() }}"
data-district="{{ $contact->relasiKontak->getDistrictName() }}"
data-village="{{ $contact->relasiKontak->getVillageName() }}">Detail</button>
<button class="btn btn-danger open-detail-modal" id="deleteContact"
data-id="{{ $contact->id }}">Hapus</button>
</td>
</tr>
@endforeach
</tbody> --}}
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@include('user.contact.modal-detail-contact')
@include('user.contact.modal-add-contact')
</section>
</div>
@include('user.contact.modal-detail-contact')
@include('user.contact.modal-add-contact')
<script>
$(document).ready(function() {
let listContact = $('#table-contact').DataTable({
@ -104,16 +85,19 @@
$('#modaldetail').on('show.bs.modal', function(event) {
var triggerLink = $(event.relatedTarget);
let dataId = triggerLink.data('id');
let dataNama = triggerLink.data('nama');
let dataEmail = triggerLink.data('email');
let dataNoHP = triggerLink.data('nohp');
let dataAlamat = triggerLink.data('alamat');
let dataProvince = triggerLink.data('province');
let dataCity = triggerLink.data('city');
let dataDistrict = triggerLink.data('district');
let dataVillage = triggerLink.data('village');
teksNama.innerHTML = dataId.nama_depan + " " + dataId.nama_belakang;
teksAlamat.innerHTML = dataId.alamat + ", " + capital(dataVillage) + ", " + capital(
teksNama.innerHTML = dataNama;
teksAlamat.innerHTML = dataNama + ", " + capital(dataVillage) + ", " + capital(
dataDistrict) + ", " + capital(dataCity) + ", " + capital(dataProvince);
teksNohp.innerHTML = dataId.nohp;
teksEmail.innerHTML = dataId.email;
teksNohp.innerHTML = dataNoHP;
teksEmail.innerHTML = dataEmail;
});
function capital(text) {
@ -122,7 +106,30 @@
});
}
$('#table-2').on('click', '#deleteContact', function() {
let table_contact = $('#table-contact').DataTable({
processing: true,
serverSide: true,
ajax: "{{ route('user-contact.list-contact') }}",
columns: [{
data: 'DT_RowIndex',
name: 'DT_RowIndex',
orderable: false,
searchable: false,
className: 'text-center'
}, {
data: 'nama_lengkap',
name: 'nama_lengkap',
className: 'text-center'
}, {
data: 'action',
name: 'action',
orderable: false,
searchable: false,
className: 'text-center'
}],
});
$('#table-contact').on('click', '#deleteContact', function() {
let dataId = $(this).data('id');
const csrfToken = $('meta[name="csrf-token"]').attr('content');
Swal.fire({
@ -168,7 +175,7 @@
}).then(function() {
Swal.close();
if (response.status) {
location.reload();
table_contact.ajax.reload();
}
});
},
@ -188,7 +195,6 @@
});
});
$('#checkButton').on('click', function() {
const email = document.querySelector('[name="email"]').value;
const csrfToken = $('meta[name="csrf-token"]').attr('content');
@ -296,7 +302,8 @@
}).then(function() {
Swal.close();
if (response.status) {
location.reload();
Swal.close();
table_contact.ajax.reload();
}
});
}

View File

@ -1,11 +1,11 @@
<div class="modal fade" id="modalForm" role="dialog">
<div class="modal-dialog modal-dialog-centered">
<div class="modal fade" id="modalForm" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h2 class="modal-title" id="exampleModalLongTitle">Tambah Kontak</h2>
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">&times;</span>
<span class="sr-only">Close</span>
</button>
</div>
<div class="col-md-12">
@ -14,7 +14,7 @@
<!-- Modal Body -->
<div class="modal-body">
<p class="statusMsg"></p>
<div class="section-body">
<form role="form" id="formContact">
<div class="form-group">
<label for="inputemail">Email</label>
@ -30,6 +30,7 @@
</div>
</form>
</div>
</div>
<!-- Modal Footer -->
<div class="modal-footer">