forked from TFMM/silent-auction
Compare commits
7 Commits
b900a5e34b
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 23f944b808 | |||
| 8b80887d91 | |||
| bd6b83ad13 | |||
| 39a181e013 | |||
| ebfbee5296 | |||
| 39ffca777c | |||
| c76a8ed04a |
@@ -351,7 +351,11 @@ class PagesController extends Controller
|
|||||||
|
|
||||||
public function winnersbyitem()
|
public function winnersbyitem()
|
||||||
{
|
{
|
||||||
$winnersbyitem_results = WinningBids::with(['items', 'bidders'])->get();
|
$winnersbyitem_results = WinningBids::with(['items', 'bidders'])
|
||||||
|
->join('items', 'winning_bids.winning_item_num', '=', 'items.iditems')
|
||||||
|
->orderByRaw('CAST(items.item_assigned_num AS UNSIGNED) ASC')
|
||||||
|
->select('winning_bids.*')
|
||||||
|
->get();
|
||||||
return view('winnersbyitem', ['winnersbyitem_results' => $winnersbyitem_results]);
|
return view('winnersbyitem', ['winnersbyitem_results' => $winnersbyitem_results]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ The Laravel framework is open-sourced software licensed under the [MIT license](
|
|||||||
- **Searchable Dropdowns:** Integrated `TomSelect` across various forms (Checkout, Reprint Receipt, etc.) for enhanced usability.
|
- **Searchable Dropdowns:** Integrated `TomSelect` across various forms (Checkout, Reprint Receipt, etc.) for enhanced usability.
|
||||||
- **Self-Checkout Flow:** Added a prominent self-checkout link for bidders, integrated with North Embedded Checkout.
|
- **Self-Checkout Flow:** Added a prominent self-checkout link for bidders, integrated with North Embedded Checkout.
|
||||||
- **Pickup Instructions:** Added clear instructions for bidders on the checkout completion page to proceed to the Item Pickup Table.
|
- **Pickup Instructions:** Added clear instructions for bidders on the checkout completion page to proceed to the Item Pickup Table.
|
||||||
|
- **North Checkout Fallback:** Restored the manual "Verify Payment Status" button and enhanced error reporting for digital wallet payments (Google Pay).
|
||||||
|
|
||||||
#### Fixed
|
#### Fixed
|
||||||
- **Logo Integration:** Corrected logo sizing issues using inline styles to override theme constraints.
|
- **Logo Integration:** Corrected logo sizing issues using inline styles to override theme constraints.
|
||||||
@@ -66,6 +67,8 @@ The Laravel framework is open-sourced software licensed under the [MIT license](
|
|||||||
- **Data Restoration:** Re-added bidder information and itemized winning lists to the checkout completion views.
|
- **Data Restoration:** Re-added bidder information and itemized winning lists to the checkout completion views.
|
||||||
|
|
||||||
#### Changed
|
#### Changed
|
||||||
|
- **Expanded Reports:** Standardized `bidderlist`, `showcarlist`, and `checkout_complete_list` to show full contact details (Address, City, State, Zip, Phone, Email).
|
||||||
|
- **Reporting Enhancements:** Added Year, Make, and Model to the `showcarlist` and included item numbers in the `checkout_complete_list` for improved tracking.
|
||||||
- **UI Cleanup:** Disabled default Tablar footers and notifications across all layout templates to maintain a focused auction interface.
|
- **UI Cleanup:** Disabled default Tablar footers and notifications across all layout templates to maintain a focused auction interface.
|
||||||
- **Theme Consistency:** Updated various partials to ensure a seamless transition from the previous custom theme to Tablar.
|
- **Theme Consistency:** Updated various partials to ensure a seamless transition from the previous custom theme to Tablar.
|
||||||
|
|
||||||
|
|||||||
@@ -17,24 +17,32 @@
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-vcenter card-table">
|
<table class="table table-vcenter card-table text-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th>Name</th>
|
<th>Last Name</th>
|
||||||
|
<th>First Name</th>
|
||||||
|
<th>Address</th>
|
||||||
|
<th>City</th>
|
||||||
|
<th>State</th>
|
||||||
|
<th>Zip</th>
|
||||||
<th>Phone</th>
|
<th>Phone</th>
|
||||||
<th>Email</th>
|
<th>Email</th>
|
||||||
<th>Address</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach($bidderlist_results as $bidder)
|
@foreach($bidderlist_results as $bidder)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $bidder->bidder_assigned_number }}</td>
|
<td>{{ $bidder->bidder_assigned_number }}</td>
|
||||||
<td>{{ $bidder->bidder_fname }} {{ $bidder->bidder_lname }}</td>
|
<td>{{ $bidder->bidder_lname }}</td>
|
||||||
<td>{{ $bidder->bidder_phone }}</td>
|
<td>{{ $bidder->bidder_fname }}</td>
|
||||||
|
<td>{{ $bidder->bidder_addr }}</td>
|
||||||
|
<td>{{ $bidder->bidder_city }}</td>
|
||||||
|
<td>{{ $bidder->bidder_state }}</td>
|
||||||
|
<td>{{ $bidder->bidder_zip }}</td>
|
||||||
|
<td>{{ \App\Helpers\PhoneHelper::format($bidder->bidder_phone) }}</td>
|
||||||
<td>{{ $bidder->bidder_email }}</td>
|
<td>{{ $bidder->bidder_email }}</td>
|
||||||
<td>{{ $bidder->bidder_addr }}, {{ $bidder->bidder_city }}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -16,28 +16,47 @@
|
|||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-vcenter card-table">
|
<table class="table table-vcenter card-table text-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Bidder #</th>
|
<th>#</th>
|
||||||
<th>Name</th>
|
<th>Last Name</th>
|
||||||
<th>Items Won</th>
|
<th>First Name</th>
|
||||||
|
<th>Address</th>
|
||||||
|
<th>City</th>
|
||||||
|
<th>State</th>
|
||||||
|
<th>Zip</th>
|
||||||
|
<th>Phone</th>
|
||||||
|
<th>Email</th>
|
||||||
<th>Total</th>
|
<th>Total</th>
|
||||||
<th>Payment</th>
|
<th>Payment Method</th>
|
||||||
|
<th>Items Won</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach($checkout_complete_results as $c)
|
@foreach($checkout_complete_results as $c)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $c->bidder_assigned_number }}</td>
|
<td>{{ $c->bidder_assigned_number }}</td>
|
||||||
<td>{{ $c->bidder_fname }} {{ $c->bidder_lname }}</td>
|
<td>{{ $c->bidder_lname }}</td>
|
||||||
|
<td>{{ $c->bidder_fname }}</td>
|
||||||
|
<td>{{ $c->bidder_addr }}</td>
|
||||||
|
<td>{{ $c->bidder_city }}</td>
|
||||||
|
<td>{{ $c->bidder_state }}</td>
|
||||||
|
<td>{{ $c->bidder_zip }}</td>
|
||||||
|
<td>{{ \App\Helpers\PhoneHelper::format($c->bidder_phone) }}</td>
|
||||||
|
<td>{{ $c->bidder_email }}</td>
|
||||||
|
<td>${{ number_format($c->winnertotal, 2) }}</td>
|
||||||
|
<td>
|
||||||
|
@if($c->payment_method == 1) Cash
|
||||||
|
@elseif($c->payment_method == 2) Check ({{ $c->check_number }})
|
||||||
|
@else Credit ({{ $c->cc_transaction }})
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@foreach(\App\Models\WinningBids::with('items')->where('winning_bidder_num', $c->bidder_num)->get() as $bid)
|
@foreach(\App\Models\WinningBids::with('items')->where('winning_bidder_num', $c->bidder_num)->get() as $bid)
|
||||||
{{ $bid->items->item_desc ?? 'N/A' }}<br>
|
<strong>#{{ $bid->items->item_assigned_num ?? '?' }}</strong> - {{ $bid->items->item_desc ?? 'N/A' }}<br>
|
||||||
@endforeach
|
@endforeach
|
||||||
</td>
|
</td>
|
||||||
<td>${{ number_format($c->winnertotal, 2) }}</td>
|
|
||||||
<td>{{ $c->payment_method == 1 ? 'Cash' : ($c->payment_method == 2 ? 'Check' : 'Credit') }}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
<div class="page-body">
|
<div class="page-body">
|
||||||
<div class="container-xl">
|
<div class="container-xl">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
<div id="payment-error-container"></div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div id="checkout-container">
|
<div id="checkout-container">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
@@ -33,6 +34,13 @@
|
|||||||
<div class="spinner-border" role="status"></div>
|
<div class="spinner-border" role="status"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="fallback-container" class="mt-4 text-center" style="display: none;">
|
||||||
|
<div class="hr-text">Still here?</div>
|
||||||
|
<p class="text-muted">If you have already completed your payment but the page hasn't redirected, please click the button below.</p>
|
||||||
|
<a id="verify-button" href="#" class="btn btn-info">
|
||||||
|
<i class="ti ti-shield-check me-2"></i>Verify Payment Status
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -67,19 +75,52 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set up fallback button
|
||||||
|
const verifyUrl = `/north/verify/${bidderId}?sessionToken=${sessionToken}`;
|
||||||
|
const verifyButton = document.getElementById('verify-button');
|
||||||
|
const fallbackContainer = document.getElementById('fallback-container');
|
||||||
|
verifyButton.href = verifyUrl;
|
||||||
|
|
||||||
|
// Show fallback after 5 seconds to give user a manual way out if auto-redirect fails
|
||||||
|
setTimeout(() => {
|
||||||
|
fallbackContainer.style.display = 'block';
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
await checkout.mount(sessionToken, 'checkout-container');
|
await checkout.mount(sessionToken, 'checkout-container');
|
||||||
|
|
||||||
const handleCompletion = (result) => {
|
const handleCompletion = (result) => {
|
||||||
window.location.href = `/north/verify/${bidderId}?sessionToken=${sessionToken}`;
|
console.log('Payment complete event received:', result);
|
||||||
|
window.location.href = verifyUrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Register standard completion events
|
||||||
checkout.onPaymentComplete(handleCompletion);
|
checkout.onPaymentComplete(handleCompletion);
|
||||||
if (typeof checkout.onPaymentSuccess === 'function') {
|
if (typeof checkout.onPaymentSuccess === 'function') {
|
||||||
checkout.onPaymentSuccess(handleCompletion);
|
checkout.onPaymentSuccess(handleCompletion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle errors
|
||||||
|
if (typeof checkout.onPaymentError === 'function') {
|
||||||
|
checkout.onPaymentError((error) => {
|
||||||
|
console.error('Payment Error:', error);
|
||||||
|
const errorDiv = document.createElement('div');
|
||||||
|
errorDiv.className = 'alert alert-danger alert-dismissible';
|
||||||
|
errorDiv.innerHTML = `
|
||||||
|
<div class="d-flex">
|
||||||
|
<div><i class="ti ti-alert-triangle me-2"></i></div>
|
||||||
|
<div>
|
||||||
|
<strong>Payment Error:</strong> ${error.message || 'An error occurred during payment.'}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a class="btn-close" data-bs-dismiss="alert" aria-label="close"></a>
|
||||||
|
`;
|
||||||
|
document.getElementById('payment-error-container').prepend(errorDiv);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Checkout Error:', error);
|
console.error('Checkout Error:', error);
|
||||||
document.getElementById('checkout-container').innerHTML = '<div class="alert alert-danger">An error occurred. Please try again.</div>';
|
document.getElementById('checkout-container').innerHTML = '<div class="alert alert-danger">An error occurred while initializing checkout. Please try again.</div>';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -14,24 +14,38 @@
|
|||||||
<div class="container-xl">
|
<div class="container-xl">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-vcenter card-table" id="showcars-table">
|
<table class="table table-vcenter card-table text-nowrap" id="showcars-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="sort" data-sort="bidder-num">Bidder #</th>
|
<th class="sort" data-sort="bidder-num">#</th>
|
||||||
|
<th class="sort" data-sort="lname">Last Name</th>
|
||||||
|
<th class="sort" data-sort="fname">First Name</th>
|
||||||
|
<th>Address</th>
|
||||||
|
<th>City</th>
|
||||||
|
<th>State</th>
|
||||||
|
<th>Zip</th>
|
||||||
|
<th>Phone</th>
|
||||||
|
<th>Email</th>
|
||||||
|
<th class="sort" data-sort="year">Year</th>
|
||||||
<th class="sort" data-sort="make">Make</th>
|
<th class="sort" data-sort="make">Make</th>
|
||||||
<th class="sort" data-sort="model">Model</th>
|
<th class="sort" data-sort="model">Model</th>
|
||||||
<th class="sort" data-sort="year">Year</th>
|
|
||||||
<th class="sort" data-sort="owner">Owner</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="list">
|
<tbody class="list">
|
||||||
@foreach($showcarlist_results as $vehicle)
|
@foreach($showcarlist_results as $vehicle)
|
||||||
<tr>
|
<tr>
|
||||||
<td class="bidder-num">{{ $vehicle->bidder_assigned_number ?? 'N/A' }}</td>
|
<td class="bidder-num">{{ $vehicle->bidder_assigned_number }}</td>
|
||||||
|
<td class="lname">{{ $vehicle->bidder_lname }}</td>
|
||||||
|
<td class="fname">{{ $vehicle->bidder_fname }}</td>
|
||||||
|
<td>{{ $vehicle->bidder_addr }}</td>
|
||||||
|
<td>{{ $vehicle->bidder_city }}</td>
|
||||||
|
<td>{{ $vehicle->bidder_state }}</td>
|
||||||
|
<td>{{ $vehicle->bidder_zip }}</td>
|
||||||
|
<td>{{ \App\Helpers\PhoneHelper::format($vehicle->bidder_phone) }}</td>
|
||||||
|
<td>{{ $vehicle->bidder_email }}</td>
|
||||||
|
<td class="year">{{ $vehicle->year }}</td>
|
||||||
<td class="make">{{ $vehicle->make }}</td>
|
<td class="make">{{ $vehicle->make }}</td>
|
||||||
<td class="model">{{ $vehicle->model }}</td>
|
<td class="model">{{ $vehicle->model }}</td>
|
||||||
<td class="year">{{ $vehicle->year }}</td>
|
|
||||||
<td class="owner">{{ $vehicle->bidder_fname }} {{ $vehicle->bidder_lname }}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -46,7 +60,7 @@
|
|||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/2.3.1/list.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
new List('showcars-table', {
|
new List('showcars-table', {
|
||||||
valueNames: ['bidder-num', 'make', 'model', 'year', 'owner']
|
valueNames: ['bidder-num', 'lname', 'fname', 'year', 'make', 'model']
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
Reference in New Issue
Block a user