This commit is contained in:
2025-07-09 10:47:12 +05:45
parent aefd8fd38c
commit 608f63cc87
4 changed files with 268 additions and 270 deletions

View File

@ -1,135 +1,139 @@
@extends('backend.template')
@section('content')
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box d-sm-flex align-items-center justify-content-between">
<h4 class="mb-sm-0">Welcome to Dashboard</h4>
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="javascript: void(0);">Dashboard</a></li>
</ol>
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box d-sm-flex align-items-center justify-content-between">
<h4 class="mb-sm-0">Welcome to Dashboard</h4>
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="javascript: void(0);">Dashboard</a></li>
</ol>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- end page title -->
<div class="row project-wrapper">
<div class="col-xxl-12">
<div class="row">
<div class="col-xl-3">
<div class="card card-animate">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="avatar-sm flex-shrink-0">
<span class="avatar-title bg-soft-primary text-primary rounded-2 fs-2">
<i data-feather="users" class="text-primary"></i>
</span>
</div>
<div class="flex-grow-1 ms-3 overflow-hidden">
<p class="text-uppercase fw-medium text-muted text-truncate mb-3">Total Enquiries</p>
<div class="d-flex align-items-center mb-3">
<h4 class="fs-4 flex-grow-1 mb-0"><span class="counter-value"
data-target="{{ $totalEnquiries }}">0</span></h4>
</div>
</div>
</div>
</div><!-- end card body -->
</div>
</div><!-- end col -->
</div><!-- end row -->
<!-- end page title -->
<div class="row project-wrapper">
<div class="col-xxl-12">
<div class="row">
<div class="col-xl-3">
<div class="card card-animate">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="avatar-sm flex-shrink-0">
<span class="avatar-title bg-soft-primary text-primary rounded-2 fs-2">
<i data-feather="users" class="text-primary"></i>
</span>
</div>
<div class="flex-grow-1 ms-3 overflow-hidden">
<p class="text-uppercase fw-medium text-muted text-truncate mb-3">Total Enquiries</p>
<div class="d-flex align-items-center mb-3">
<h4 class="fs-4 flex-grow-1 mb-0"><span class="counter-value"
data-target="{{ $totalEnquiries }}">0</span></h4>
</div>
</div>
</div>
</div><!-- end card body -->
</div>
</div><!-- end col -->
</div><!-- end row -->
<div class="row">
<div class="col-xl-8">
<div class="card card-height-100">
<div class="card-header d-flex align-items-center">
<h4 class="card-title flex-grow-1 mb-0">Recent Enquiries</h4>
</div><!-- end cardheader -->
<div class="card-body">
<div class="table-responsive table-card">
<table class="table-centered table align-middle">
<thead class="bg-light text-muted">
<tr>
<th scope="col" style="width: 10%;">Date</th>
<th scope="col">Name</th>
<th scope="col">Email</th>
<th scope="col">Phone</th>
<th scope="col">Service</th>
<th scope="col">Message</th>
<th scope="col">Status</th>
<th scope="col">Action</th>
</tr><!-- end tr -->
</thead><!-- thead -->
<tbody>
@forelse ($enquiries as $enquiry)
<tr>
<td class="text-muted">{{ $enquiry->created_at->diffForHumans() }}</td>
<td>
<a href="javascript: void(0);" class="text-reset">{{ $enquiry->name }}</a>
</td>
<td>
<a href="javascript: void(0);" class="text-reset">{{ $enquiry->email }}</a>
</td>
<td>
<a href="javascript: void(0);" class="text-reset">{{ $enquiry->phone }}</a>
</td>
<td>
<a href="javascript: void(0);" class="text-reset">{{ $enquiry->service?->title }}</a>
</td>
<td class="fw-medium">{{ $enquiry->message }}</td>
<td><span class="badge badge-soft-danger">New</span></td>
<td>
<a href="{{ route('enquiry.markAsRead', ['id' => $enquiry->id]) }}"
<div class="row">
<div class="col-xl-8">
<div class="card card-height-100">
<div class="card-header d-flex align-items-center">
<h4 class="card-title flex-grow-1 mb-0">Recent Enquiries</h4>
</div><!-- end cardheader -->
<div class="card-body">
<div class="table-responsive table-card">
<table class="table-centered table align-middle">
<thead class="bg-light text-muted">
<tr>
<th scope="col" style="width: 10%;">Date</th>
<th scope="col">Name</th>
<th scope="col">Email</th>
<th scope="col">Phone</th>
<th scope="col">Service</th>
<th scope="col">Message</th>
<th scope="col">Status</th>
<th scope="col">Action</th>
</tr><!-- end tr -->
</thead><!-- thead -->
<tbody>
@forelse ($enquiries as $enquiry)
<tr>
<td class="text-muted">{{ $enquiry->created_at->diffForHumans() }}</td>
<td>
<a href="javascript: void(0);"
class="text-reset">{{ $enquiry->name }}</a>
</td>
<td>
<a href="javascript: void(0);"
class="text-reset">{{ $enquiry->email }}</a>
</td>
<td>
<a href="javascript: void(0);"
class="text-reset">{{ $enquiry->phone }}</a>
</td>
<td>
<a href="javascript: void(0);"
class="text-reset">{{ $enquiry->service?->title }}</a>
</td>
<td class="fw-medium">{{ $enquiry->message }}</td>
<td><span class="badge badge-soft-danger">New</span></td>
<td>
{{-- <a href="{{ route('enquiry.markAsRead', ['id' => $enquiry->id]) }}"
onclick="confirmRead(this.href)"><i
class="ri-mail-check-line fs-17 lh-1 text-warning align-middle" data-bs-toggle="tooltip"
data-bs-placement="top" data-bs-custom-class="custom-tooltip" title="Mark as Read"></i></a>
</td>
</tr>
@empty
@endforelse
<!-- end tr -->
</tbody><!-- end tbody -->
</table><!-- end table -->
</div>
</div><!-- end card body -->
</div><!-- end card -->
data-bs-placement="top" data-bs-custom-class="custom-tooltip" title="Mark as Read"></i></a> --}}
</td>
</tr>
@empty
@endforelse
<!-- end tr -->
</tbody><!-- end tbody -->
</table><!-- end table -->
</div>
</div><!-- end card body -->
</div><!-- end card -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end row -->
@endsection
@push('js')
<script>
function confirmRead(url) {
event.preventDefault();
Swal.fire({
title: 'Are you sure?',
text: 'It will be marked as read',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Mark as read',
cancelButtonText: 'Cancel',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url,
type: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response) {
Swal.fire('Mark!', 'The item has been marked as read.', 'success');
location.reload();
},
error: function(xhr, status, error) {
Swal.fire('Error!', 'An error occurred while marking the item.', 'error');
}
});
<script>
function confirmRead(url) {
event.preventDefault();
Swal.fire({
title: 'Are you sure?',
text: 'It will be marked as read',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Mark as read',
cancelButtonText: 'Cancel',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url,
type: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response) {
Swal.fire('Mark!', 'The item has been marked as read.', 'success');
location.reload();
},
error: function(xhr, status, error) {
Swal.fire('Error!', 'An error occurred while marking the item.', 'error');
}
});
}
});
}
});
}
</script>
</script>
@endpush

View File

@ -1,167 +1,161 @@
@extends('backend.template')
@section('content')
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h2>{{ label('Enquiries List') }}</h2>
</div>
<div class="card-body">
<table class="dataTable table" id="tbl_enquiries">
<thead class="table-light">
<tr>
<th class="tb-col"><span class="overline-title">{{ label('S.N') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Name') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Email') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('contact') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Service') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Message') }}</span></th>
<th class="tb-col" data-sortable="false"><span class="overline-title">{{ label('Action') }}</span>
</th>
</tr>
</thead>
<tbody>
@php
$i = 1;
@endphp
@foreach ($data as $item)
@php
$isRead = $item->is_read == 0 ? true : false;
@endphp
<tr data-id="{{ $item->id }}" data-display_order="{{ $item->display_order }}" class="draggable-row">
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $i++ }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->name }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->email }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->phone }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->service?->title }}</td>
@if ($item->message)
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->message }}</td>
@else
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">
-
</td>
@endif
<td class="tb-col">
<div class="dropdown d-inline-block">
<button class="btn btn-soft-secondary btn-sm dropdown" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="ri-more-fill align-middle"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a href="{{ route('enquiry.destroy', ['id' => $item->id]) }}" class="dropdown-item"
onclick="confirmDelete(this.href)">
<i class="ri-delete-bin-fill text-muted me-2 align-bottom"></i>
{{ label('Delete') }}
</a>
@if ($item->is_read == 0)
<a href="{{ route('enquiry.markAsRead', ['id' => $item->id]) }}" class="dropdown-item"
onclick="confirmRead(this.href)">
<i class="ri-mail-check-line text-muted me-2 align-bottom"></i>
{{ label('Mark as read') }}
</a>
@endif
</li>
{{-- <li>
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h2>{{ label('Enquiries List') }}</h2>
</div>
<div class="card-body">
<table class="dataTable table" id="tbl_enquiries">
<thead class="table-light">
<tr>
<th class="tb-col"><span class="overline-title">{{ label('S.N') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Name') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Email') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('contact') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Score') }}</span></th>
<th class="tb-col"><span class="overline-title">{{ label('Passed Year') }}</span></th>
<th class="tb-col" data-sortable="false"><span class="overline-title">{{ label('Action') }}</span>
</th>
</tr>
</thead>
<tbody>
@php
$i = 1;
@endphp
@foreach ($data as $item)
@php
$isRead = $item->is_read == 0 ? true : false;
@endphp
<tr data-id="{{ $item->id }}" data-display_order="{{ $item->display_order }}"
class="draggable-row">
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $i++ }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->name }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->email }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->phone }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->score }}</td>
<td class="tb-col {{ $isRead ? 'text-success' : 'text-muted' }}">{{ $item->passed_year }}</td>
<td class="tb-col">
<div class="dropdown d-inline-block">
<button class="btn btn-soft-secondary btn-sm dropdown" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
<i class="ri-more-fill align-middle"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
{{-- <a href="{{ route('enquiry.destroy', $item->id) }}" class="dropdown-item"
onclick="confirmDelete(this.href)">
<i class="ri-delete-bin-fill text-muted me-2 align-bottom"></i>
{{ label('Delete') }}
</a> --}}
{{-- @if ($item->is_read == 0)
<a href="{{ route('enquiry.markAsRead', ['id' => $item->id]) }}"
class="dropdown-item" onclick="confirmRead(this.href)">
<i class="ri-mail-check-line text-muted me-2 align-bottom"></i>
{{ label('Mark as read') }}
</a>
@endif --}}
</li>
{{-- <li>
<a href="{{ route('enquiry.markread', ['id' => $item->id]) }}"
class="dropdown-item remove-item-btn">
<i class="ri-delete-bin-fill text-muted me-2 align-bottom"></i>
{{ label('Mark Read') }}
</a>
</li> --}}
</ul>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</ul>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('css')
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.5/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/rowreorder/1.4.0/css/rowReorder.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.5/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/rowreorder/1.4.0/css/rowReorder.dataTables.min.css">
@endpush
@push('js')
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/vfs_fonts.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.13.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.4.1/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/rowreorder/1.4.0/js/dataTables.rowReorder.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.68/vfs_fonts.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.13.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.4.1/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/rowreorder/1.4.0/js/dataTables.rowReorder.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
$(document).ready(function() {
var mytable = $(".dataTable").DataTable({
ordering: true,
rowReorder: {
//selector: 'tr'
},
});
})
<script>
$(document).ready(function() {
var mytable = $(".dataTable").DataTable({
ordering: true,
rowReorder: {
//selector: 'tr'
},
});
})
function confirmDelete(url) {
event.preventDefault();
Swal.fire({
title: 'Are you sure?',
text: 'You will not be able to recover this item!',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Delete',
cancelButtonText: 'Cancel',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url,
type: 'DELETE',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response) {
Swal.fire('Deleted!', 'The item has been deleted.', 'success');
location.reload();
},
error: function(xhr, status, error) {
Swal.fire('Error!', 'An error occurred while deleting the item.', 'error');
}
});
function confirmDelete(url) {
event.preventDefault();
Swal.fire({
title: 'Are you sure?',
text: 'You will not be able to recover this item!',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Delete',
cancelButtonText: 'Cancel',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url,
type: 'DELETE',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response) {
Swal.fire('Deleted!', 'The item has been deleted.', 'success');
location.reload();
},
error: function(xhr, status, error) {
Swal.fire('Error!', 'An error occurred while deleting the item.', 'error');
}
});
}
});
}
});
}
function confirmRead(url) {
event.preventDefault();
Swal.fire({
title: 'Are you sure?',
text: 'It will be marked as read',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Mark as read',
cancelButtonText: 'Cancel',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url,
type: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response) {
Swal.fire('Mark!', 'The item has been marked as read.', 'success');
location.reload();
},
error: function(xhr, status, error) {
Swal.fire('Error!', 'An error occurred while marking the item.', 'error');
}
});
function confirmRead(url) {
event.preventDefault();
Swal.fire({
title: 'Are you sure?',
text: 'It will be marked as read',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Mark as read',
cancelButtonText: 'Cancel',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url,
type: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response) {
Swal.fire('Mark!', 'The item has been marked as read.', 'success');
location.reload();
},
error: function(xhr, status, error) {
Swal.fire('Error!', 'An error occurred while marking the item.', 'error');
}
});
}
});
}
});
}
</script>
</script>
@endpush

View File

@ -1,6 +1,6 @@
@use('App\Models\Enquiries')
@php
$enquiryList = Enquiries::where('status', 1)->where('is_read', 0)->latest()->get();
$enquiryList = Enquiries::where('status', 1)->latest()->get();
$enquiryCount = $enquiryList->count();
@endphp
<div class="dropdown topbar-head-dropdown header-item ms-1" id="notificationDropdown">

View File

@ -99,8 +99,8 @@ Route::middleware('auth')->group(function () {
return view('backend.enquiries-list', compact('data'));
})->name('enquiries-list');
Route::delete('/enquiry/destory/{id}', function ($id) {
$data = Enquiries::where('enquiry_id', $id)->firstOrFail()->delete();
Route::delete('/enquiry/destroy/{id}', function ($id) {
Enquiries::where('enquiry_id', $id)->firstOrFail()->delete();
return response()->json(['status' => true, 'Deleted successfully']);
})->name('enquiry.destroy');