checkbox fixes enquiry for bulk mail
This commit is contained in:
@@ -18,13 +18,13 @@ class EnquiryController extends Controller
|
||||
|
||||
public function index()
|
||||
{
|
||||
$is_enrolled = request()->get('is_enrolled', null);
|
||||
// $is_enrolled = request()->get('is_enrolled', null);
|
||||
if (request()->ajax()) {
|
||||
$model = Enquiry::query()->latest();
|
||||
return DataTables::eloquent($model)
|
||||
->addIndexColumn()
|
||||
->addColumn('checkbox', function (Enquiry $enquiry) {
|
||||
return '<input type="checkbox" class="enquiry-select" value="' . $enquiry->id . '" data-name="' . $enquiry->name . '">';
|
||||
return '<input type="checkbox" class="enquiry-select" value="' . $enquiry->id . '">';
|
||||
})
|
||||
->setRowClass(function (Enquiry $enquiry) {
|
||||
return $enquiry->is_read ? 'text-muted' : 'text-dark';
|
||||
@@ -145,4 +145,34 @@ class EnquiryController extends Controller
|
||||
return redirect()->back()->with('error', $th->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function bulkAction(Request $request)
|
||||
{
|
||||
$ids = $request->ids;
|
||||
$action = $request->action;
|
||||
|
||||
if (!$ids || !$action) {
|
||||
return response()->json(['message' => 'No action performed.'], 400);
|
||||
}
|
||||
|
||||
$enquiries = Enquiry::whereIn('id', $ids)->get();
|
||||
|
||||
if ($action == 2) {
|
||||
// Example: send newsletter
|
||||
foreach ($enquiries as $enquiry) {
|
||||
// Your newsletter logic here
|
||||
}
|
||||
return response()->json(['message' => 'Newsletter sent to selected enquiries!']);
|
||||
}
|
||||
|
||||
if ($action == 3) {
|
||||
// Example: send normal mail
|
||||
foreach ($enquiries as $enquiry) {
|
||||
// Your mail logic here
|
||||
}
|
||||
return response()->json(['message' => 'Mails sent to selected enquiries!']);
|
||||
}
|
||||
|
||||
return response()->json(['message' => 'Invalid action.'], 400);
|
||||
}
|
||||
}
|
||||
|
@@ -8,10 +8,12 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@php
|
||||
// IMPORTANT: 'data' must match the key returned by DataTables JSON.
|
||||
// Your controller uses ->addColumn('checkbox', ...), so use 'checkbox' here.
|
||||
$columns = [
|
||||
[
|
||||
'title' => '<input type="checkbox" id="select-all">',
|
||||
'data' => 'checkbox',
|
||||
'data' => 'checkbox', // <-- was 'select'
|
||||
'name' => 'checkbox',
|
||||
'orderable' => false,
|
||||
'searchable' => false,
|
||||
@@ -35,20 +37,69 @@
|
||||
|
||||
<x-data-table-script :route="route('enquiry.index')" :reorder="null" :columns="$columns" />
|
||||
</div>
|
||||
<div class="card" id="customerList">
|
||||
|
||||
<div class="card-body p-2">
|
||||
{{-- <div class="table-responsive">
|
||||
{{ $dataTable->table(['class' => 'table table-sm w-100', 'data-is_enrolled' => $is_enrolled], true) }}
|
||||
</div> --}}
|
||||
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-3">
|
||||
{{ html()->select('action', [2 => 'Send News Letter', 3 => 'Send Mail'])->placeholder('Bulk Actions')->class('form-select bulk-select') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script>
|
||||
$(function () {
|
||||
// Initialize DataTable ONCE on the correct selector
|
||||
const enquiryTable = $('.ajax-datatable').DataTable({
|
||||
columnDefs: [
|
||||
{ targets: 0, orderable: false, searchable: false } // disable checkbox col
|
||||
]
|
||||
});
|
||||
|
||||
// Keep master checkbox cleared on redraws (pagination/filtering)
|
||||
enquiryTable.on('draw', function () {
|
||||
$('#select-all').prop('checked', false);
|
||||
});
|
||||
|
||||
// Select/Deselect all (current page rows)
|
||||
$(document).on('change', '#select-all', function () {
|
||||
const checked = this.checked;
|
||||
const rows = enquiryTable.rows({ page: 'current' }).nodes();
|
||||
$('.enquiry-select', rows).prop('checked', checked);
|
||||
});
|
||||
|
||||
// When any row checkbox changes, sync master checkbox state for current page
|
||||
$(document).on('change', '.enquiry-select', function () {
|
||||
const rows = enquiryTable.rows({ page: 'current' }).nodes();
|
||||
const total = $('.enquiry-select', rows).length;
|
||||
const checked = $('.enquiry-select:checked', rows).length;
|
||||
$('#select-all').prop('checked', total > 0 && checked === total);
|
||||
});
|
||||
|
||||
// Bulk action (optional)
|
||||
$('.bulk-select').on('change', function () {
|
||||
const action = $(this).val();
|
||||
const ids = $('.enquiry-select:checked').map(function () { return this.value; }).get();
|
||||
|
||||
if (!ids.length) {
|
||||
alert('Please select at least one enquiry.');
|
||||
$(this).val('');
|
||||
return;
|
||||
}
|
||||
|
||||
if (action == 2 || action == 3) {
|
||||
$.ajax({
|
||||
url: "{{ route('enquiry.bulkAction') }}",
|
||||
method: "POST",
|
||||
data: {
|
||||
_token: "{{ csrf_token() }}",
|
||||
action: action,
|
||||
ids: ids
|
||||
},
|
||||
success: function (res) {
|
||||
alert(res.message);
|
||||
enquiryTable.ajax.reload(null, false); // keep page
|
||||
$('.bulk-select').val('');
|
||||
$('#select-all').prop('checked', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
@@ -134,6 +134,7 @@ Route::group(['middleware' => ['web', 'auth', 'permission'], 'prefix' => 'admin/
|
||||
Route::get('institution/toggle/{id}', [InstitutionController::class, 'toggle'])->name('institution.toggle');
|
||||
Route::resource('institution', InstitutionController::class)->names('institution')->only(['store', 'edit', 'destroy']);
|
||||
|
||||
Route::post('/enquiry/bulk-action', [EnquiryController::class, 'bulkAction'])->name('enquiry.bulkAction');
|
||||
Route::get('enquiry/mark-as-read/{id}', [EnquiryController::class, 'markAsRead'])->name('enquiry.markAsRead');
|
||||
Route::resource('enquiry', EnquiryController::class)->names('enquiry')->only(['index', 'store', 'destroy']);
|
||||
|
||||
|
Reference in New Issue
Block a user