feedback list

This commit is contained in:
Bayu Lukman Yusuf 2026-03-02 16:38:30 +07:00
parent 479eeafaaa
commit 089308d86c
4 changed files with 135 additions and 186 deletions

View File

@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Repositories\Crm\SurveyFeedbackRepository;
class ReviewController extends Controller
{
public function index(Request $request, SurveyFeedbackRepository $surveyFeedbackRepository)
{
$list = $surveyFeedbackRepository->getList([]);
// dd($list);
return view('account.reviews',[
'list' => $list
]);
}
}

View File

@ -0,0 +1,57 @@
<?php
namespace App\Repositories\Crm;
use App\Models\Survey;
use App\Models\SurveyFeedback;
use App\Models\SurveyFeedbackDetail;
use App\Models\SurveyQuestion;
use Carbon\Carbon;
use Illuminate\Support\Str;
use DB;
class SurveyFeedbackRepository
{
public function getList(array $params = [])
{
$limit = @$params["limit"] ? (int) @$params["limit"] : 10;
$sortColumn = @$params["sort"]["column"] ? $params["sort"]["column"] : "id";
$sortDir = @$params["sort"]["dir"] ? $params["sort"]["dir"] : "desc";
$results = SurveyFeedback::with([
'survey',
'detail'
])->select('survey_feedback.*')
->leftJoin('customers', 'survey_feedback.customer_id', 'customers.id')
->leftJoin('survey', 'survey_feedback.survey_id', 'survey.id')
->when(@$params["filter"]['start'], function($query) use ($params){
$query->whereDate("survey_feedback.time", '>=', $params['filter']['start']);
})
->when(@$params["filter"]['end'], function($query) use ($params){
$query->whereDate("survey_feedback.time", '<=', $params['filter']['end']);
})
->when(@$params["filter"]['survey_id'], function($query) use ($params){
$query->where("survey_id", $params['filter']['survey_id']);
})
->when(@$params["filter"]['status'], function($query) use ($params){
if($params['filter']['status'] == 'BELUM DIISI') {
$query->whereNull("survey_feedback.time");
}
if($params['filter']['status'] == 'SUDAH DIISI') {
$query->whereNotNull("survey_feedback.time");
}
})
->when(@$params["search"], function($query) use ($params){
$query->where(function($query) use ($params) {
$query->where("survey.name","ilike","%". $params["search"] . "%")
->orWhere("customers.name","ilike","%". $params["search"] . "%");
});
})
->where("survey_feedback.customer_id", auth()->user()->customer->id)
->orderBy($sortColumn, $sortDir)
->paginate($limit);
return $results;
}
}

View File

@ -9,24 +9,34 @@
<div class="col-sm-6 col-md-7 col-xxl-8 mb-3 mb-md-0">
<h1 class="h2 me-3 mb-0">My reviews</h1>
</div>
<div class="col-sm-6 col-md-5 col-xxl-4">
{{-- <div class="col-sm-6 col-md-5 col-xxl-4">
<select aria-label="Wishlist sorting" class="form-select" data-select='{"removeItemButton": false}'>
<option value="products-reviews">Products and reviews</option>
<option value="reviews">My reviews</option>
<option value="products">Products awaiting reviews</option>
</select>
</div>
</div> --}}
</div>
<!-- Review items (List) -->
@foreach ($list as $key => $value)
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Image" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/11.png" width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Apple iPad 10.2" 2021 Wi-Fi 64 GB Space Gray
(MK2K3RK/A)</a>
<img alt="Image" class="d-block my-xl-1" src="{{ asset('logo/logo-app.png') }}" width="64" />
<div>
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0" href="# ">
{{ $value->survey->title ?? '-' }}, {{ $value->survey->content ?? '-' }}
</a>
<div>
@foreach ($value->detail as $item)
{{ $item->description ?? '-' }}
@endforeach
</div>
<div class="d-flex h6 fs-sm pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
</div>
</div>
{{-- <div class="d-flex h6 fs-sm pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="flex-shrink-0 d-md-none" style="width: 64px"></div>
<svg class="text-warning flex-shrink-0 me-2" fill="currentColor" height="16" width="16"
xmlns="http://www.w3.org/2000/svg">
@ -41,169 +51,25 @@
</path>
</svg>
+100 bonuses for a review
</div>
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Image" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/12.png" width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Laptop Apple MacBook Pro 13 M2</a>
</div>
<div
class="position-relative d-flex align-items-center text-decoration-none min-w-0 pt-1 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="flex-shrink-0 d-md-none" style="width: 64px"></div>
<div class="h6 fs-sm text-body-secondary text-truncate p-0 me-3 me-sm-4 mb-0">+100 bonuses
earned</div>
<div class="d-flex gap-1 fs-sm me-2 me-sm-3">
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
</div>
<a aria-controls="reviewDetails" aria-label="Show review details"
class="btn btn-icon btn-ghost btn-secondary stretched-link border-0" data-bs-toggle="offcanvas"
href="#reviewDetails">
<i class="ci-chevron-right fs-lg"></i>
</a>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/13.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Razer Opus X Mercury Headphones
(RZ04-03760200-R3M1)</a>
</div>
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/14.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">3D virtual reality glasses VR Shinecon G10 for
smartphones with a large screen</a>
</div>
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/15.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Apple iPad Pro M2 2022 64 GB Space Gray</a>
</div>
<div class="d-flex h6 fs-sm pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="flex-shrink-0 d-md-none" style="width: 64px"></div>
<svg class="text-warning flex-shrink-0 me-2" fill="currentColor" height="16" width="16"
xmlns="http://www.w3.org/2000/svg">
<path
d="M1.333 9.667H7.5V16h-5c-.64 0-1.167-.527-1.167-1.167V9.667zm13.334 0v5.167c0 .64-.527 1.167-1.167 1.167h-5V9.667h6.167zM0 5.833V7.5c0 .64.527 1.167 1.167 1.167h.167H7.5v-1-3H1.167C.527 4.667 0 5.193 0 5.833zm14.833-1.166H8.5v3 1h6.167.167C15.473 8.667 16 8.14 16 7.5V5.833c0-.64-.527-1.167-1.167-1.167z">
</path>
<path
d="M8 5.363a.5.5 0 0 1-.495-.573C7.752 3.123 9.054-.03 12.219-.03c1.807.001 2.447.977 2.447 1.813 0 1.486-2.069 3.58-6.667 3.58zM12.219.971c-2.388 0-3.295 2.27-3.595 3.377 1.884-.088 3.072-.565 3.756-.971.949-.563 1.287-1.193 1.287-1.595 0-.599-.747-.811-1.447-.811z">
</path>
<path
d="M8.001 5.363c-4.598 0-6.667-2.094-6.667-3.58 0-.836.641-1.812 2.448-1.812 3.165 0 4.467 3.153 4.713 4.819a.5.5 0 0 1-.495.573zM3.782.971c-.7 0-1.448.213-1.448.812 0 .851 1.489 2.403 5.042 2.566C7.076 3.241 6.169.971 3.782.971z">
</path>
</svg>
+86 bonuses for a review
</div>
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/16.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Mobile phone Apple iPhone 14 256GB
Starlight</a>
</div>
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/17.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Power Bank PBS 10000 mAh Black</a>
</div>
<div
class="position-relative d-flex align-items-center text-decoration-none min-w-0 pt-1 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="flex-shrink-0 d-md-none" style="width: 64px"></div>
<div class="d-flex gap-1 fs-sm me-2 me-sm-3">
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
<i class="ci-star-filled text-warning"></i>
<i class="ci-star text-body-tertiary opacity-75"></i>
</div>
<a aria-controls="reviewDetails" aria-label="Show review details"
class="btn btn-icon btn-ghost btn-secondary stretched-link border-0" data-bs-toggle="offcanvas"
href="#reviewDetails">
<i class="ci-chevron-right fs-lg"></i>
</a>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/18.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">Apple iPhone 14 128GB Blue</a>
</div>
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
</div>
<!-- Item -->
<div class="d-md-flex align-items-center justify-content-between gap-4 border-bottom py-3">
<div class="nav flex-nowrap position-relative align-items-center">
<img alt="Product thumb" class="d-block my-xl-1" src="/img/shop/electronics/thumbs/19.png"
width="64" />
<a class="nav-link stretched-link hover-effect-underline ps-3 p-0"
href="{{ route('second', ['shop', 'product-general-electronics']) }}">VRB01 Camera Nikon Max</a>
</div>
</div> --}}
@if (count($value->detail ?? []) == 0)
<div class="d-flex pt-2 pt-md-0 ps-3 ps-md-0 mb-2 mb-md-0">
<div class="d-md-none" style="width: 64px"></div>
<button class="btn btn-secondary" data-bs-target="#reviewForm" data-bs-toggle="modal"
type="button">Leave a review</button>
</div>
@endif
</div>
@endforeach
@if ($list->hasPages())
{{ $list->links() }}
@endif
<!-- Pagination -->
<nav aria-label="Page navigation example" class="pt-3 pb-2 pb-sm-0 mt-2 mt-md-3">
{{-- <nav aria-label="Page navigation example" class="pt-3 pb-2 pb-sm-0 mt-2 mt-md-3">
<ul class="pagination">
<li aria-current="page" class="page-item active">
<span class="page-link">
@ -221,7 +87,7 @@
<a class="page-link" href="#">4</a>
</li>
</ul>
</nav>
</nav> --}}
</div>
</div>
@endsection

View File

@ -20,6 +20,7 @@ use App\Http\Controllers\HelpController;
use App\Http\Controllers\VoucherEventController;
use App\Http\Controllers\ContactController;
use App\Http\Controllers\WishController;
use App\Http\Controllers\ReviewController;
use Illuminate\Support\Facades\Route;
@ -146,6 +147,10 @@ Route::middleware(['auth'])->prefix('/account/wishlist')->group(function () {
});
Route::middleware(['auth'])->prefix('/account/reviews')->group(function () {
Route::get('/', [ReviewController::class, 'index'])->name('reviews');
});
Route::get('/terms-and-conditions', [TncController::class, 'index'])->name('terms-and-conditions');
Route::get('/help', [HelpController::class, 'index'])->name('help');
Route::get('/contact', [ContactController::class, 'index'])->name('contact');