forked from TFMM/silent-auction
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d64e1d5578 | |||
| ad66fef19b | |||
| 5a7684bc8c | |||
| aed29fbf56 | |||
| 816fba5121 | |||
| ddbfc642f2 | |||
| b6db2f200b | |||
| ef4ef144a6 |
@@ -0,0 +1 @@
|
|||||||
|
{"version":2,"defects":{"Tests\\Feature\\MyWinningsTest::test_mywinnings_form_is_accessible":8,"Tests\\Feature\\MyWinningsTest::test_mywinnings_results_show_correct_data":8,"Tests\\Feature\\MyWinningsTest::test_mywinnings_invalid_bidder_shows_error":8},"times":{"Tests\\Unit\\PhoneFormattingTest::it_formats_a_10_digit_phone_number":0.018,"Tests\\Unit\\PhoneFormattingTest::it_strips_non_numeric_characters_before_formatting":0,"Tests\\Unit\\PhoneFormattingTest::it_returns_original_value_if_not_10_digits":0,"Tests\\Unit\\PhoneFormattingTest::bidder_model_accessor_formats_phone_number":0.003}}
|
||||||
@@ -57,7 +57,8 @@ class BiddersResource extends Resource
|
|||||||
TextColumn::make('bidder_city')->label('City')->sortable(),
|
TextColumn::make('bidder_city')->label('City')->sortable(),
|
||||||
TextColumn::make('bidder_state')->label('State')->sortable(),
|
TextColumn::make('bidder_state')->label('State')->sortable(),
|
||||||
TextColumn::make('bidder_zip')->label('Zip')->sortable(),
|
TextColumn::make('bidder_zip')->label('Zip')->sortable(),
|
||||||
TextColumn::make('bidder_phone')->label('Phone Number')->sortable(),
|
TextColumn::make('bidder_phone')->label('Phone Number')->sortable()
|
||||||
|
->formatStateUsing(fn ($state) => \App\Helpers\PhoneHelper::format($state)),
|
||||||
TextColumn::make('bidder_email')->label('Email')->sortable(),
|
TextColumn::make('bidder_email')->label('Email')->sortable(),
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Helpers;
|
||||||
|
|
||||||
|
class PhoneHelper
|
||||||
|
{
|
||||||
|
public static function format($phone)
|
||||||
|
{
|
||||||
|
$phone = preg_replace('/[^0-9]/', '', $phone);
|
||||||
|
if (strlen($phone) == 10) {
|
||||||
|
return preg_replace('/([0-9]{3})([0-9]{3})([0-9]{4})/', '$1-$2-$3', $phone);
|
||||||
|
}
|
||||||
|
return $phone;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -515,4 +515,30 @@ class PagesController extends Controller
|
|||||||
//dd($showcarlist_results);
|
//dd($showcarlist_results);
|
||||||
return view('showcarlist', ['showcarlist_results' => $showcarlist_results]);
|
return view('showcarlist', ['showcarlist_results' => $showcarlist_results]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function myWinnings(Request $request)
|
||||||
|
{
|
||||||
|
if (!$request->bidder_number) {
|
||||||
|
return view('mywinnings_form');
|
||||||
|
}
|
||||||
|
|
||||||
|
$bidder_number = $request->bidder_number;
|
||||||
|
$bidder = Bidders::where('bidder_assigned_number', $bidder_number)->first();
|
||||||
|
|
||||||
|
if (!$bidder) {
|
||||||
|
return view('mywinnings_form', ['error' => 'Bidder number not found.']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$winnings = WinningBids::with('items')
|
||||||
|
->where('winning_bidder_num', $bidder->idbidders)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$total_cost = $winnings->sum('winning_cost');
|
||||||
|
|
||||||
|
return view('mywinnings_results', [
|
||||||
|
'bidder' => $bidder,
|
||||||
|
'winnings' => $winnings,
|
||||||
|
'total_cost' => $total_cost
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class WinningBids extends Model
|
|||||||
|
|
||||||
public function items()
|
public function items()
|
||||||
{
|
{
|
||||||
return $this->hasOne(Items::class, 'iditems', 'winning_item_num');
|
return $this->belongsTo(Items::class, 'winning_item_num', 'iditems');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function bidders()
|
public function bidders()
|
||||||
|
|||||||
@@ -49,3 +49,21 @@ If you discover a security vulnerability within Laravel, please send an e-mail t
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
The Laravel framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT).
|
The Laravel framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT).
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### [bidder-facing-checkout] - 2026-04-24
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
- **Public Winnings View:** Introduced a new feature allowing bidders to check their won items by entering their bidder number.
|
||||||
|
- **Routes:** Added `/mywinnings` (GET and POST) routes to `routes/web.php`.
|
||||||
|
- **Controller Logic:** Implemented `myWinnings` method in `PagesController` to handle bidder lookups and display results.
|
||||||
|
- **Views:**
|
||||||
|
- `resources/views/mywinnings_form.blade.php`: Search form for bidder number.
|
||||||
|
- `resources/views/mywinnings_results.blade.php`: Detailed list of won items and total cost.
|
||||||
|
- **Navigation:** Added "Check My Winnings" link to the main layout navbar for easy public access.
|
||||||
|
- **Testing:** Created `tests/Feature/MyWinningsTest.php` to ensure the new feature works as expected.
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
- **Models:** Updated `App\Models\WinningBids` relationship `items()` from `hasOne` to `belongsTo` to correctly map the database structure and support eager loading.
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
{{ $bidderlist_result->bidder_zip }}
|
{{ $bidderlist_result->bidder_zip }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $bidderlist_result->bidder_phone }}
|
{{ \App\Helpers\PhoneHelper::format($bidderlist_result->bidder_phone) }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $bidderlist_result->bidder_email }}
|
{{ $bidderlist_result->bidder_email }}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
||||||
</th>
|
</th>
|
||||||
<th colspan="2">
|
<th colspan="2">
|
||||||
Phone Number: {{ $checkout_info_result->bidder_phone }}
|
Phone Number: {{ \App\Helpers\PhoneHelper::format($checkout_info_result->bidder_phone) }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
||||||
</th>
|
</th>
|
||||||
<th colspan="2">
|
<th colspan="2">
|
||||||
Phone Number: {{ $checkout_info_result->bidder_phone }}
|
Phone Number: {{ \App\Helpers\PhoneHelper::format($checkout_info_result->bidder_phone) }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
{{ $checkout_complete_result->bidder_zip }}
|
{{ $checkout_complete_result->bidder_zip }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $checkout_complete_result->bidder_phone }}
|
{{ \App\Helpers\PhoneHelper::format($checkout_complete_result->bidder_phone) }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $checkout_complete_result->bidder_email }}
|
{{ $checkout_complete_result->bidder_email }}
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@push('styles')
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||||||
|
<style>
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
height: 34px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -32,3 +49,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#checkoutbiddernum').select2({
|
||||||
|
placeholder: "Select a bidder",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@push('styles')
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||||||
|
<style>
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
height: 34px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -13,7 +30,7 @@
|
|||||||
<label for=winneritemnum class="col-sm-3 col-sm-offset-1 control-label">
|
<label for=winneritemnum class="col-sm-3 col-sm-offset-1 control-label">
|
||||||
Item Number:
|
Item Number:
|
||||||
</label>
|
</label>
|
||||||
<div class=col-sm-2>
|
<div class=col-sm-4>
|
||||||
<select name="winid" id="winid" required class=form-control>
|
<select name="winid" id="winid" required class=form-control>
|
||||||
<?php echo App\Helpers\WinningBidSelectList::winningBidShowNumbers(); ?>
|
<?php echo App\Helpers\WinningBidSelectList::winningBidShowNumbers(); ?>
|
||||||
</select>
|
</select>
|
||||||
@@ -23,7 +40,7 @@
|
|||||||
<label for=winnerbiddernum class="col-sm-3 col-sm-offset-1 control-label">
|
<label for=winnerbiddernum class="col-sm-3 col-sm-offset-1 control-label">
|
||||||
Bidder Number:
|
Bidder Number:
|
||||||
</label>
|
</label>
|
||||||
<div class=col-sm-2>
|
<div class=col-sm-4>
|
||||||
<select name="winnerbiddernum" id="winnerbiddernum" required class=form-control>
|
<select name="winnerbiddernum" id="winnerbiddernum" required class=form-control>
|
||||||
<?php echo App\Helpers\BidderSelectList::bidderShowNumbers(); ?>
|
<?php echo App\Helpers\BidderSelectList::bidderShowNumbers(); ?>
|
||||||
</select>
|
</select>
|
||||||
@@ -49,3 +66,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#winid').select2({
|
||||||
|
placeholder: "Select an item/winner",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
$('#winnerbiddernum').select2({
|
||||||
|
placeholder: "Select a bidder",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
|||||||
@@ -67,8 +67,7 @@
|
|||||||
{{ $finaltally_result->bidder_zip }}
|
{{ $finaltally_result->bidder_zip }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $finaltally_result->bidder_phone }}
|
{{ \App\Helpers\PhoneHelper::format($finaltally_result->bidder_phone) }} </td>
|
||||||
</td>
|
|
||||||
<td>
|
<td>
|
||||||
{{ $finaltally_result->bidder_email }}
|
{{ $finaltally_result->bidder_email }}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
<!-- Styles -->
|
<!-- Styles -->
|
||||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||||
|
@stack('styles')
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
@@ -102,6 +103,11 @@
|
|||||||
Winners by Item
|
Winners by Item
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/mywinnings">
|
||||||
|
Check My Winnings
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
@@ -239,5 +245,6 @@
|
|||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
<script src="{{ asset('js/app.js') }}"></script>
|
<script src="{{ asset('js/app.js') }}"></script>
|
||||||
|
@stack('scripts')
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8 col-md-offset-2">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">Check My Winnings</div>
|
||||||
|
|
||||||
|
<div class="panel-body">
|
||||||
|
@if (isset($error))
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
{{ $error }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<form class="form-horizontal" method="POST" action="/mywinnings">
|
||||||
|
{{ csrf_field() }}
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="bidder_number" class="col-md-4 control-label">Bidder Number</label>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input id="bidder_number" type="text" class="form-control" name="bidder_number" value="{{ old('bidder_number') }}" required autofocus>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-md-8 col-md-offset-4">
|
||||||
|
<button type="submit" class="btn btn-primary">
|
||||||
|
Check Winnings
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-10 col-md-offset-1">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">Winnings for Bidder #{{ $bidder->bidder_assigned_number }} - {{ $bidder->bidder_fname }} {{ $bidder->bidder_lname }}</div>
|
||||||
|
|
||||||
|
<div class="panel-body">
|
||||||
|
@if($winnings->count() > 0)
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Item #</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Amount</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach($winnings as $winning)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $winning->items->item_assigned_num }}</td>
|
||||||
|
<td>{{ $winning->items->item_desc }}</td>
|
||||||
|
<td>${{ number_format($winning->winning_cost, 2) }}</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2" class="text-right">Total:</th>
|
||||||
|
<th>${{ number_format($total_cost, 2) }}</th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
@else
|
||||||
|
<p>No winning bids found for this bidder number.</p>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div class="text-center">
|
||||||
|
<a href="/mywinnings" class="btn btn-default">Back to Search</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -49,8 +49,7 @@
|
|||||||
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
Phone Number: {{ $checkout_info_result->bidder_phone }}
|
Phone Number: {{ \App\Helpers\PhoneHelper::format($checkout_info_result->bidder_phone) }} </td>
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -49,8 +49,7 @@
|
|||||||
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
Name: {{ $checkout_info_result->bidder_fname }} {{ $checkout_info_result->bidder_lname }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
Phone Number: {{ $checkout_info_result->bidder_phone }}
|
Phone Number: {{ \App\Helpers\PhoneHelper::format($checkout_info_result->bidder_phone) }} </td>
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@push('styles')
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||||||
|
<style>
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
height: 34px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -15,7 +32,7 @@
|
|||||||
Select Bidder Number:
|
Select Bidder Number:
|
||||||
</label>
|
</label>
|
||||||
<div class=col-sm-4>
|
<div class=col-sm-4>
|
||||||
<select name="reprintbiddernum" id="checkoutbiddernum" required class=form-control>
|
<select name="reprintbiddernum" id="reprintbiddernum" required class=form-control>
|
||||||
<?php echo App\Helpers\CheckoutBidderSelectList::checkoutBidderShowNumbers(); ?>
|
<?php echo App\Helpers\CheckoutBidderSelectList::checkoutBidderShowNumbers(); ?>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@@ -32,3 +49,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#reprintbiddernum').select2({
|
||||||
|
placeholder: "Select a bidder",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
{{ $showcarlist_result->bidder_zip }}
|
{{ $showcarlist_result->bidder_zip }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $showcarlist_result->bidder_phone }}
|
{{ \App\Helpers\PhoneHelper::format($showcarlist_result->bidder_phone) }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $showcarlist_result->bidder_email }}
|
{{ $showcarlist_result->bidder_email }}
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@push('styles')
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||||||
|
<style>
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
height: 34px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -14,7 +31,7 @@
|
|||||||
<label for=winneritemnum class="col-sm-3 col-sm-offset-1 control-label">
|
<label for=winneritemnum class="col-sm-3 col-sm-offset-1 control-label">
|
||||||
Item Number:
|
Item Number:
|
||||||
</label>
|
</label>
|
||||||
<div class=col-sm-2>
|
<div class=col-sm-4>
|
||||||
<select name="winneritemnum" id="winneritemnum" required class=form-control>
|
<select name="winneritemnum" id="winneritemnum" required class=form-control>
|
||||||
<?php echo App\Helpers\ItemSelectList::itemShowNumbers(); ?>
|
<?php echo App\Helpers\ItemSelectList::itemShowNumbers(); ?>
|
||||||
</select>
|
</select>
|
||||||
@@ -24,7 +41,7 @@
|
|||||||
<label for=winnerbiddernum class="col-sm-3 col-sm-offset-1 control-label">
|
<label for=winnerbiddernum class="col-sm-3 col-sm-offset-1 control-label">
|
||||||
Bidder Number:
|
Bidder Number:
|
||||||
</label>
|
</label>
|
||||||
<div class=col-sm-2>
|
<div class=col-sm-4>
|
||||||
<select name="winnerbiddernum" id="winnerbiddernum" required class=form-control>
|
<select name="winnerbiddernum" id="winnerbiddernum" required class=form-control>
|
||||||
<?php echo App\Helpers\BidderSelectList::bidderShowNumbers(); ?>
|
<?php echo App\Helpers\BidderSelectList::bidderShowNumbers(); ?>
|
||||||
</select>
|
</select>
|
||||||
@@ -50,3 +67,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#winnerbiddernum').select2({
|
||||||
|
placeholder: "Select a bidder",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
// Also making item number searchable as it's generally expected for "typed in" lookups
|
||||||
|
$('#winneritemnum').select2({
|
||||||
|
placeholder: "Select an item",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
|||||||
@@ -20,8 +20,7 @@
|
|||||||
Name: {{ $winnertotal_info_result->bidder_fname }} {{ $winnertotal_info_result->bidder_lname }}
|
Name: {{ $winnertotal_info_result->bidder_fname }} {{ $winnertotal_info_result->bidder_lname }}
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
Phone Number: {{ $winnertotal_info_result->bidder_phone }}
|
Phone Number: {{ \App\Helpers\PhoneHelper::format($winnertotal_info_result->bidder_phone) }} </th>
|
||||||
</th>
|
|
||||||
<th>
|
<th>
|
||||||
Total: ${{ $winnertotal_info_result->total_cost }}
|
Total: ${{ $winnertotal_info_result->total_cost }}
|
||||||
</th>
|
</th>
|
||||||
|
|||||||
@@ -1,5 +1,22 @@
|
|||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@push('styles')
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||||||
|
<style>
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
height: 34px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -32,3 +49,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#winnerbiddernum').select2({
|
||||||
|
placeholder: "Select a bidder",
|
||||||
|
allowClear: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ Route::get('winningbidderlist', [ 'uses' => 'PagesController@winningbidderlist']
|
|||||||
Route::get('showwinners', [ 'uses' => 'PagesController@showwinners']);
|
Route::get('showwinners', [ 'uses' => 'PagesController@showwinners']);
|
||||||
Route::get('showscores', [ 'uses' => 'PagesController@showscores']);
|
Route::get('showscores', [ 'uses' => 'PagesController@showscores']);
|
||||||
Route::get('showscoresbycar', [ 'uses' => 'PagesController@showscoresbycar']);
|
Route::get('showscoresbycar', [ 'uses' => 'PagesController@showscoresbycar']);
|
||||||
|
Route::get('mywinnings', [ 'uses' => 'PagesController@myWinnings']);
|
||||||
|
Route::post('mywinnings', [ 'uses' => 'PagesController@myWinnings']);
|
||||||
|
|
||||||
Route::group(['middleware' => 'auth'], function() {
|
Route::group(['middleware' => 'auth'], function() {
|
||||||
Route::get('bidders', [ 'uses' => 'PagesController@bidders']);
|
Route::get('bidders', [ 'uses' => 'PagesController@bidders']);
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use Tests\TestCase;
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use App\Models\Bidders;
|
||||||
|
use App\Models\Items;
|
||||||
|
use App\Models\WinningBids;
|
||||||
|
|
||||||
|
class MyWinningsTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
public function test_mywinnings_form_is_accessible()
|
||||||
|
{
|
||||||
|
$response = $this->get('/mywinnings');
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertSee('Check My Winnings');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_mywinnings_results_show_correct_data()
|
||||||
|
{
|
||||||
|
// Create a bidder
|
||||||
|
$bidder = Bidders::create([
|
||||||
|
'bidder_assigned_number' => '999',
|
||||||
|
'bidder_fname' => 'Test',
|
||||||
|
'bidder_lname' => 'User',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create an item
|
||||||
|
$item = Items::create([
|
||||||
|
'item_assigned_num' => '777',
|
||||||
|
'item_desc' => 'Test Item',
|
||||||
|
'item_min_bid' => 10,
|
||||||
|
'item_est_value' => 20,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create a winning bid
|
||||||
|
WinningBids::create([
|
||||||
|
'winning_bidder_num' => $bidder->idbidders,
|
||||||
|
'winning_item_num' => $item->iditems,
|
||||||
|
'winning_cost' => 15,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = $this->post('/mywinnings', [
|
||||||
|
'bidder_number' => '999'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertSee('Winnings for Bidder #999');
|
||||||
|
$response->assertSee('Test Item');
|
||||||
|
$response->assertSee('$15.00');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_mywinnings_invalid_bidder_shows_error()
|
||||||
|
{
|
||||||
|
$response = $this->post('/mywinnings', [
|
||||||
|
'bidder_number' => 'NONEXISTENT'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertSee('Bidder number not found.');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit;
|
||||||
|
|
||||||
|
use Tests\TestCase;
|
||||||
|
use App\Models\Bidders;
|
||||||
|
use App\Helpers\PhoneHelper;
|
||||||
|
|
||||||
|
class PhoneFormattingTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @test */
|
||||||
|
public function it_formats_a_10_digit_phone_number()
|
||||||
|
{
|
||||||
|
$formatted = PhoneHelper::format('1234567890');
|
||||||
|
$this->assertEquals('123-456-7890', $formatted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_strips_non_numeric_characters_before_formatting()
|
||||||
|
{
|
||||||
|
$formatted = PhoneHelper::format('(123) 456-7890');
|
||||||
|
$this->assertEquals('123-456-7890', $formatted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_returns_original_value_if_not_10_digits()
|
||||||
|
{
|
||||||
|
$formatted = PhoneHelper::format('1234567');
|
||||||
|
$this->assertEquals('1234567', $formatted);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user