checkbox fixes enquiry for bulk mail
This commit is contained in:
@@ -18,13 +18,13 @@ class EnquiryController extends Controller
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$is_enrolled = request()->get('is_enrolled', null);
|
// $is_enrolled = request()->get('is_enrolled', null);
|
||||||
if (request()->ajax()) {
|
if (request()->ajax()) {
|
||||||
$model = Enquiry::query()->latest();
|
$model = Enquiry::query()->latest();
|
||||||
return DataTables::eloquent($model)
|
return DataTables::eloquent($model)
|
||||||
->addIndexColumn()
|
->addIndexColumn()
|
||||||
->addColumn('checkbox', function (Enquiry $enquiry) {
|
->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) {
|
->setRowClass(function (Enquiry $enquiry) {
|
||||||
return $enquiry->is_read ? 'text-muted' : 'text-dark';
|
return $enquiry->is_read ? 'text-muted' : 'text-dark';
|
||||||
@@ -145,4 +145,34 @@ class EnquiryController extends Controller
|
|||||||
return redirect()->back()->with('error', $th->getMessage());
|
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>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@php
|
@php
|
||||||
|
// IMPORTANT: 'data' must match the key returned by DataTables JSON.
|
||||||
|
// Your controller uses ->addColumn('checkbox', ...), so use 'checkbox' here.
|
||||||
$columns = [
|
$columns = [
|
||||||
[
|
[
|
||||||
'title' => '<input type="checkbox" id="select-all">',
|
'title' => '<input type="checkbox" id="select-all">',
|
||||||
'data' => 'checkbox',
|
'data' => 'checkbox', // <-- was 'select'
|
||||||
'name' => 'checkbox',
|
'name' => 'checkbox',
|
||||||
'orderable' => false,
|
'orderable' => false,
|
||||||
'searchable' => false,
|
'searchable' => false,
|
||||||
@@ -35,20 +37,69 @@
|
|||||||
|
|
||||||
<x-data-table-script :route="route('enquiry.index')" :reorder="null" :columns="$columns" />
|
<x-data-table-script :route="route('enquiry.index')" :reorder="null" :columns="$columns" />
|
||||||
</div>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@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::get('institution/toggle/{id}', [InstitutionController::class, 'toggle'])->name('institution.toggle');
|
||||||
Route::resource('institution', InstitutionController::class)->names('institution')->only(['store', 'edit', 'destroy']);
|
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::get('enquiry/mark-as-read/{id}', [EnquiryController::class, 'markAsRead'])->name('enquiry.markAsRead');
|
||||||
Route::resource('enquiry', EnquiryController::class)->names('enquiry')->only(['index', 'store', 'destroy']);
|
Route::resource('enquiry', EnquiryController::class)->names('enquiry')->only(['index', 'store', 'destroy']);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user