Compare commits

...

277 Commits

Author SHA1 Message Date
rlong eff3707268 feat: add automatic item pickup slip printing via HP ePrint 2026-05-12 15:44:40 -04:00
rlong 23f944b808 fix: sort winnersbyitem by item number numerically 2026-05-03 07:12:01 -04:00
rlong 8b80887d91 Merge pull request 'fix: restore fallback verification button and error handling for North checkout' (#7) from feature/tablar-theme into master
Reviewed-on: North-Hackathon/silent-auction#7
2026-05-03 07:06:20 -04:00
rlong bd6b83ad13 docs: update changelog with reporting and checkout verification improvements 2026-05-03 07:05:13 -04:00
rlong 39a181e013 feat: update showcarlist columns to show full contact and vehicle details 2026-05-03 07:03:17 -04:00
rlong ebfbee5296 feat: update bidderlist columns to show full contact details 2026-05-03 07:01:57 -04:00
rlong 39ffca777c feat: expand checkout_complete_list columns and include item numbers 2026-05-03 07:00:25 -04:00
rlong c76a8ed04a fix: restore fallback verification button and error handling for North checkout 2026-05-03 06:55:40 -04:00
rlong b900a5e34b Merge pull request 'feat: install and scaffold Tablar theme' (#6) from feature/tablar-theme into master
Reviewed-on: North-Hackathon/silent-auction#6
2026-05-02 16:01:19 -04:00
rlong 896c96e1a4 docs: update readme with changelog for tablar theme changes 2026-05-02 16:00:39 -04:00
rlong f9590c7814 disable footer inclusion in all layouts 2026-05-02 15:56:04 -04:00
rlong 2935d84671 fix checkout route by aligning view fields with controller expectations 2026-05-02 15:51:39 -04:00
rlong a1ef5686e3 add pickup instructions to checkout complete page 2026-05-02 15:48:11 -04:00
rlong ce5b69f362 restore checkout data display on checkout complete 2026-05-02 15:46:15 -04:00
rlong a95aa04cb9 disable notifications inclusion 2026-05-02 15:28:08 -04:00
rlong 935c7ba31b update user menu to match previous theme 2026-05-02 15:26:07 -04:00
rlong 700d2f0741 update logo 2026-05-02 15:22:22 -04:00
rlong 4ef20cba50 fix logo size 2026-05-02 15:16:46 -04:00
rlong f35624cc6d fix logo size 2026-05-02 15:14:02 -04:00
rlong 6a911ba76c Merge pull request 'Update navbar logo to auction_logo_small.jpg' (#5) from feature/tablar-theme-logo-update into feature/tablar-theme
Reviewed-on: North-Hackathon/silent-auction#5
2026-05-02 15:08:51 -04:00
dbaugher d1c03b927e Update navbar logo to auction_logo_small.jpg
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 17:33:30 -04:00
rlong bbea9e51c8 style: convert self-checkout link to a large prominent button 2026-05-01 16:06:21 -04:00
rlong 17b2224490 feat: add self-checkout link to home dashboard 2026-05-01 16:05:14 -04:00
rlong c2ec8464ba feat: add searchable dropdowns to reprint_receipt and winnertotal forms 2026-05-01 16:03:15 -04:00
rlong 1dbf0c51bb feat: make all dropdowns searchable using tomselect 2026-05-01 16:00:08 -04:00
rlong 2b5046b077 fix: resolve editwinners Undefined variable and update winning_cost input type 2026-05-01 15:56:35 -04:00
rlong a2ce8a51fe feat: show bidder and vehicle details in carshowscores view 2026-05-01 15:54:08 -04:00
rlong 2512c27904 feat: show bidder and vehicle details in carshowwinners view 2026-05-01 15:52:54 -04:00
rlong 4fdd41e9b8 fix: resolve cat_name exception and correct model relationships 2026-05-01 15:51:23 -04:00
rlong e79d6174f8 feat: enable OIDC social login in auth views 2026-05-01 15:43:45 -04:00
rlong 4ed1f6769d Merge pull request 'Remove the theme creator header buttons' (#3) from feature/tablar-theme-remove-ads into feature/tablar-theme
Reviewed-on: North-Hackathon/silent-auction#3
2026-05-01 15:40:48 -04:00
rlong f75bdb6b4a fix: update pcentry dropdown and add vote count field 2026-05-01 15:39:42 -04:00
rlong 31acaa23dd fix 2026-05-01 15:32:34 -04:00
rlong d4ea64007f fix: restore full PagesController content 2026-05-01 15:31:34 -04:00
rlong 7a05e73d52 fix: correct PagesController file corruption 2026-05-01 15:28:29 -04:00
rlong 9ed1765c73 fix: update carshowwinners view to use correct variable and relationships 2026-05-01 15:25:11 -04:00
rlong 4893550e2a fix: pass missing view variables for showwinners, showscores, winners, and editwinners 2026-05-01 15:25:03 -04:00
dbaugher 24e2d91eb7 Remove the theme creator header buttons 2026-05-01 15:24:54 -04:00
rlong 7a6028c63d fix: update judges form to use judge number instead of name 2026-05-01 15:23:57 -04:00
rlong 8d138e22b7 feat: expand checkout_complete_list with items won 2026-05-01 15:23:34 -04:00
rlong 92da95bdff feat: expand bidderlist with contact info 2026-05-01 15:23:26 -04:00
rlong 2e5454484f fix: change score input type to text to remove spinner controls 2026-05-01 15:22:13 -04:00
rlong ad610633d1 feat: standardize tomselect configuration across all dropdowns 2026-05-01 15:18:27 -04:00
rlong 80545f38b3 fix: correct syntax and remove duplicate code in PagesController 2026-05-01 15:17:37 -04:00
rlong 1b30673823 fix: restore natural sorting for vehicles by bidder assigned number 2026-05-01 15:16:47 -04:00
rlong 3703ed569a fix: enable scrolling and show all options in tomselect 2026-05-01 14:44:44 -04:00
rlong c63ca6626e fix: resolve judgingentry dropdown population and visibility issues 2026-05-01 14:37:56 -04:00
rlong a7edc0115d fix: use dropdownParent: body in TomSelect to fix visibility issues 2026-05-01 14:32:37 -04:00
rlong e8a31380f7 fix: force initialize tomselect for judgingentry 2026-05-01 14:31:19 -04:00
rlong 1ad8f53a95 fix: restore missing foreach loop variables in judgingentry 2026-05-01 14:30:37 -04:00
rlong 05dad0ece0 fix: cleanup judgingentry blade and ensure proper tomselect include 2026-05-01 14:30:05 -04:00
rlong b5bbe4d1b5 debug: move tomselect include to judgingentry.blade.php for testing 2026-05-01 14:29:31 -04:00
rlong 2db4ad18e3 debug: isolate tomselect to bidders.blade.php 2026-05-01 14:28:59 -04:00
rlong 107223f2cc fix: use IIFE to prevent tomselect double initialization 2026-05-01 14:28:11 -04:00
rlong 799eb37ae0 debug: apply aggressive CSS to troubleshoot tomselect visibility 2026-05-01 14:26:49 -04:00
rlong d79d2fbe3e debug: simplify tomselect for basic diagnostic 2026-05-01 14:26:04 -04:00
rlong 6e2c27a5a4 fix: directly inject tomselect in checkout_select_form for immediate verify 2026-05-01 14:24:57 -04:00
rlong 9e2c50a9ee debug: add logging to verify tomselect option detection 2026-05-01 14:23:45 -04:00
rlong 239ee20397 feat: centralize tomselect logic and script loading 2026-05-01 14:22:47 -04:00
rlong 7bf32dfdcc fix: re-enable searchable dropdowns and apply natural sorting for judgingentry 2026-05-01 14:21:21 -04:00
rlong f96b70684b fix: correctly display judge number and vehicle bidder number in judgingentry form 2026-05-01 14:20:06 -04:00
rlong bd87475b4d debug: bypass tomselect for judgingentry dropdowns to verify data rendering 2026-05-01 14:17:57 -04:00
rlong 6b1d87414e fix: restore direct collection loop in judgingentry view 2026-05-01 14:16:49 -04:00
rlong 7a4b926aac debug: add logs to verify judgingentry data counts 2026-05-01 14:16:09 -04:00
rlong fb31d91476 fix: ensure judgingentry always fetches data regardless of request method 2026-05-01 14:14:27 -04:00
rlong 55a05ef00e fix: add isset checks to judgingentry view 2026-05-01 14:14:00 -04:00
rlong a4483788cf fix: restore missing variables in judgingentry foreach loops 2026-05-01 14:13:21 -04:00
rlong 2a6edc07f9 fix: resolve tomselect script inclusion in judgingentry 2026-05-01 14:12:47 -04:00
rlong ba6182e41e fix: pass judges and vehicles data to judgingentry view 2026-05-01 14:11:29 -04:00
rlong 2cd8feb19d feat: make winnersbyitem table sortable using list.js 2026-05-01 14:10:42 -04:00
rlong b6ed1e8325 fix: access items data via relationship in winnersbyitem 2026-05-01 14:10:10 -04:00
rlong 7a29315759 fix: use eloquent relationships for winnersbyitem to prevent property access error 2026-05-01 14:09:36 -04:00
rlong 5f4b0c16a3 fix: correct layout placement for winnerlist and winningbidderlist 2026-05-01 14:08:20 -04:00
rlong 599b404791 feat: restore grid display for winningbidderlist 2026-05-01 14:06:48 -04:00
rlong 3ddf99172e fix: update winningbidderlist to only show bidders with winning bids 2026-05-01 14:05:36 -04:00
rlong 5c1b855283 feat: update itemlist table columns to display estimated value and minimum bid 2026-05-01 14:04:20 -04:00
rlong a4f26e9006 fix: force bidder number numeric sort in tomselect 2026-05-01 14:02:36 -04:00
rlong 444b9e26db fix: use numeric localeCompare in tomselect for natural bidder sorting 2026-05-01 14:02:03 -04:00
rlong 24905c9506 fix: re-enable tomselect sorting 2026-05-01 14:01:35 -04:00
rlong 6cb3e1ac24 fix: disable internal TomSelect sorting to respect server-side order 2026-05-01 14:01:07 -04:00
rlong 30dbbd6d58 fix: use SQL CAST for reliable numeric sorting of bidder numbers 2026-05-01 14:00:38 -04:00
rlong 6193e7fce4 fix: sort bidders numerically in controller for reliable dropdown order 2026-05-01 13:59:39 -04:00
rlong 2521246bda fix: revert to localeCompare numeric:true for natural sorting 2026-05-01 13:59:16 -04:00
rlong b208af478d fix: use explicit numeric comparison in tomselect for reliable sorting 2026-05-01 13:58:48 -04:00
rlong 7d9af30ed3 fix: re-implement numeric natural sorting for dropdowns 2026-05-01 13:58:22 -04:00
rlong 46fbe7c98d fix: remove invalid sortOptions call from tomselect 2026-05-01 13:57:40 -04:00
rlong 87aa8d74d4 fix: use native Tom Select sorting 2026-05-01 13:56:56 -04:00
rlong 01a6d78333 fix: use explicit numeric parsing for bidder number sorting 2026-05-01 13:56:25 -04:00
rlong af49c71d72 fix: use numeric sorting for tomselect dropdowns 2026-05-01 13:56:00 -04:00
rlong e74295fee4 fix: force white background on all tomselect elements 2026-05-01 13:54:51 -04:00
rlong e47e20e49b fix: restore background color for searchable dropdowns 2026-05-01 13:54:27 -04:00
rlong 365ebf112a fix: align tomselect configuration with tablar native implementation 2026-05-01 13:53:56 -04:00
rlong 8e6f4bdcfc debug: aggressive initialization and logging for tomselect 2026-05-01 13:52:33 -04:00
rlong 597c11acd1 fix: restore background color and borders to tomselect inputs 2026-05-01 13:52:10 -04:00
rlong ea0c1272d1 fix: prevent double initialization of tomselect and update style 2026-05-01 13:51:20 -04:00
rlong 66e0e467df fix: re-add missing tomselect include to checkout_select_form 2026-05-01 13:50:12 -04:00
rlong 46c88ed22a feat: export tablar views and fix js stack 2026-05-01 13:04:37 -04:00
rlong 4bd0ec6e35 debug: test script injection 2026-05-01 13:02:22 -04:00
rlong 68f3be7644 fix: correctly stack all tomselect includes 2026-05-01 13:01:26 -04:00
rlong e19c077203 fix: correctly stack all tomselect includes within js push directive 2026-05-01 13:00:28 -04:00
rlong bb71e41459 fix: use @push('js') to correctly inject tomselect script into Tablar layout 2026-05-01 12:59:21 -04:00
rlong 1f4b108c51 debug: add verbose logging to tomselect init 2026-05-01 12:58:18 -04:00
rlong 762b242046 debug: update tomselect initialization and check 2026-05-01 12:57:37 -04:00
rlong 3cc39c4b3d fix: explicitly define controlInput in Tom Select 2026-05-01 12:56:51 -04:00
rlong ef00695950 fix: ensure Tom Select searchability and handle selection 2026-05-01 12:56:21 -04:00
rlong 3f711effdc fix: add Tom Select CSS and use window load event 2026-05-01 12:55:02 -04:00
rlong 599dfb6f14 fix: remove duplicated tomselect include from checkout_select_form 2026-05-01 12:53:35 -04:00
rlong 5049ed9777 fix: use @push for tomselect component to resolve duplicate dropdowns 2026-05-01 12:53:00 -04:00
rlong b564a63c67 feat: enable searchable dropdowns (Tom Select) for all tablar views 2026-05-01 12:51:06 -04:00
rlong 3d95c63e63 revert: remove tom-select from checkout bidder dropdown 2026-05-01 12:49:43 -04:00
rlong 72362d2d90 fix: sort bidders and enable tom-select for bidder dropdown 2026-05-01 12:49:17 -04:00
rlong 0c4df52f83 fix: pass bidders to checkout select form to resolve undefined variable 2026-05-01 12:47:51 -04:00
rlong c6a82f66ad fix: restore north embedded checkout scripts and container configuration 2026-05-01 12:40:25 -04:00
rlong 760a3887b6 feat: hide vehicle type field and set default value to 2 in showcars form 2026-05-01 12:36:55 -04:00
rlong 583b146f41 feat: align showcars form layout with bidders form structure 2026-05-01 12:35:40 -04:00
rlong 9526e17f09 feat: re-organize and shorten form fields in showcars form 2026-05-01 12:34:43 -04:00
rlong b82df0a0fb feat: organize address fields in standard row layout 2026-05-01 12:33:32 -04:00
rlong 7598164ce4 feat: layout showcars form fields one per line 2026-05-01 12:32:35 -04:00
rlong e813d2543f fix: restore missing bidder and vehicle fields to showcars form 2026-05-01 12:31:58 -04:00
rlong 74d67d073e fix: use showcarlist_results variable and update owner column in showcarlist view 2026-05-01 12:30:57 -04:00
rlong e5dbe3e126 fix: restore separate showcars form and showcarlist table views 2026-05-01 12:30:00 -04:00
rlong 18e7c9b361 fix: use correct variable name showcarlist_results in showcarlist view 2026-05-01 12:28:30 -04:00
rlong bec2234bd4 fix: name mywinnings, showwinners, and score routes to resolve RouteNotFoundException 2026-05-01 12:25:08 -04:00
rlong 492ff400c7 fix: name all routes used in Tablar menu 2026-05-01 12:24:27 -04:00
rlong d0a0149a75 fix: correct tablar menu structure to avoid array_push argument error 2026-05-01 12:23:39 -04:00
rlong 10349075b0 fix: define home route name to resolve RouteNotFoundException 2026-05-01 12:22:54 -04:00
rlong 44a34b1114 feat: sync tablar menu with application navigation 2026-05-01 12:22:06 -04:00
rlong bd93dd0bf7 feat: make showcars table sortable using list.js 2026-05-01 12:20:35 -04:00
rlong 81dbf11592 fix: add bidder assigned number to showcars table 2026-05-01 12:20:10 -04:00
rlong 7c88db310d fix: restore table-based layout and display owner data for showcars 2026-05-01 12:19:39 -04:00
rlong 0fd6a6c3e2 fix: pass vehicles data to showcars view 2026-05-01 12:18:40 -04:00
rlong 01c1d77016 fix: resolve vite manifest issue by updating package.json and fixing asset build 2026-05-01 12:14:43 -04:00
rlong 008000314f feat: migrate final batch of views to tablar 2026-05-01 12:01:47 -04:00
rlong a382a434d4 feat: migrate home and winnertotalform views to tablar 2026-05-01 12:00:20 -04:00
rlong 610ee4290b feat: migrate reprint_receipt_form and winningbidderlist views to tablar 2026-05-01 12:00:02 -04:00
rlong 846db1accf feat: migrate vehicletypes and winnertotal views to tablar 2026-05-01 11:59:42 -04:00
rlong 78c2fbb41a feat: migrate mywinnings_results and showcars views to tablar 2026-05-01 11:59:31 -04:00
rlong f130d39118 feat: migrate checkout and checkout_complete views to tablar 2026-05-01 11:59:13 -04:00
rlong 1adb557265 feat: migrate checkout select and checkout list views to tablar 2026-05-01 11:57:48 -04:00
rlong 75aa121ac7 feat: migrate judgingentry and pcentry views to tablar 2026-05-01 11:57:33 -04:00
rlong 296a6b9243 feat: migrate carshowwinners and judges views to tablar 2026-05-01 11:57:26 -04:00
rlong ccac39cd85 feat: migrate bidderlist and awardcategories views to tablar 2026-05-01 11:57:03 -04:00
rlong 69e4516ad8 feat: migrate winnersbyitem and carshowscores views to tablar 2026-05-01 11:56:44 -04:00
rlong f6aac32eaa feat: migrate winners and final tally views to tablar 2026-05-01 11:56:29 -04:00
rlong a60a89d77d feat: migrate item and winner views to tablar 2026-05-01 11:56:14 -04:00
rlong cec229459d feat: migrate bidders view to tablar 2026-05-01 11:51:01 -04:00
rlong 2ae745ffea chore: update tablar menu configuration 2026-05-01 11:50:49 -04:00
rlong bd52e27f76 feat: install and scaffold Tablar theme 2026-05-01 11:49:20 -04:00
rlong 9108b6bab6 Merge pull request 'upgrade: laravel 12' (#2) from feature/upgrade-laravel-13 into master
Reviewed-on: North-Hackathon/silent-auction#2
2026-05-01 11:47:19 -04:00
rlong 58450a1262 upgrade: laravel 12 2026-05-01 11:44:17 -04:00
rlong 878236ae2f Merge pull request 'feat: integrate North Embedded Checkout for bidder payments' (#1) from feature/north-embedded-checkout into master
Reviewed-on: North-Hackathon/silent-auction#1
2026-05-01 10:20:21 -04:00
rlong 05ab1c6014 fix: use correct Options object for Dompdf configuration 2026-05-01 10:10:16 -04:00
rlong 9065dcd911 missing use 2026-05-01 10:09:35 -04:00
rlong dcd08ae530 fix duplicate function 2026-05-01 10:09:01 -04:00
rlong d468991bd1 typo 2026-05-01 10:08:01 -04:00
rlong 7d1ec59dea feat: switch to dompdf for receipt generation 2026-05-01 10:06:35 -04:00
rlong 24d1eda717 feat: install spatie/browsershot 2026-05-01 09:57:46 -04:00
rlong 9d981f3a34 feat: migrate receipt PDF generation to Spatie Laravel PDF 2026-05-01 09:56:16 -04:00
rlong b9c018a4a6 fix: set tempDir via getMpdf to bypass problematic loadView config array 2026-05-01 09:44:04 -04:00
rlong 23b0b30434 fix: provide full mPDF configuration to avoid null array offset errors 2026-05-01 09:42:05 -04:00
rlong 4b9220c89e fix: update mPDF temp directory configuration key to temp_dir 2026-05-01 09:40:35 -04:00
rlong 298f3fa22b fix: resolve mPDF temp directory access error by using storage_path 2026-05-01 09:38:46 -04:00
rlong 98be7131f4 update views 2026-05-01 09:36:43 -04:00
rlong 999c1dfc58 fix: switch to correct PDF facade for mPDF and resolve receipt 500 error 2026-05-01 09:34:56 -04:00
rlong a3fd278536 fix: resolve receipt 404 and add save receipt pdf functionality 2026-05-01 09:32:26 -04:00
rlong 290498c728 fix: improve Google Pay handling with additional status checks, robust data extraction, and a fallback verification button 2026-05-01 09:27:36 -04:00
rlong aca21ae115 fix display 2026-05-01 09:01:28 -04:00
rlong 982efbf2bd fix: handle 'Approved' status and extract nested transaction ID from North API response 2026-05-01 08:59:09 -04:00
rlong 3953a6f4c8 fix height 2026-05-01 08:55:06 -04:00
rlong fbb10a01d4 ui: switch from min-height to explicit height for checkout container 2026-05-01 08:46:46 -04:00
rlong 6ccb754e0c ui: increase checkout container height to 800px 2026-05-01 08:44:57 -04:00
rlong 50826c8c20 update div height 2026-05-01 08:43:26 -04:00
rlong 68f75ac2fc feat: include products in checkout and increase form container size 2026-05-01 08:41:58 -04:00
rlong 9587c44657 fix: improve API request headers and error reporting for session creation and verification 2026-05-01 08:38:47 -04:00
rlong 06de3c0145 fix: broaden session token extraction to handle various North API response formats 2026-05-01 08:35:41 -04:00
rlong d2d53e961b fix: resolve invalid session token by correctly extracting token from North API response 2026-05-01 08:32:31 -04:00
rlong b0816231d6 feat: integrate North Embedded Checkout for bidder payments 2026-05-01 08:18:26 -04:00
rlong e4cccba942 Merge pull request 'change button color' (#9) from feature/all-searchable-selects into master
Reviewed-on: #9
2026-04-30 15:39:37 -04:00
rlong e023f68a84 change button color 2026-04-30 15:38:39 -04:00
rlong 4edb7fac10 Merge pull request 'feat: implement global searchable selects using Select2 and remove redundant per-view implementations' (#8) from feature/all-searchable-selects into master
Reviewed-on: #8
2026-04-30 15:36:37 -04:00
rlong 19f93f95bb feat: implement global searchable selects using Select2 and remove redundant per-view implementations 2026-04-30 15:33:34 -04:00
rlong 885161cc2b Merge pull request 'Add seeders and factories for all models' (#7) from feature/add-model-seeders into master
Reviewed-on: #7
2026-04-29 20:39:40 -04:00
rlong a8fd03f256 Add seeders and factories for all models 2026-04-29 20:38:05 -04:00
rlong 00ff08e3a6 Enable profile and add OIDC menu item to Filament panel configuration 2026-04-26 17:10:28 -04:00
rlong 7e8b35bf20 Add Link OIDC Account and Admin links to frontend user menu 2026-04-26 17:09:52 -04:00
rlong 681d8b73d6 Move OIDC menu item registration to boot method for reliability 2026-04-26 17:08:00 -04:00
rlong f294ded6e8 fix resource 2026-04-26 16:46:28 -04:00
rlong eca564eac7 fix userresource 2026-04-26 16:44:17 -04:00
rlong e8df889f7e Merge pull request 'Implement OIDC authentication via Laravel Socialite' (#6) from feature/socialite-oidc-auth into master
Reviewed-on: #6
2026-04-26 16:39:34 -04:00
rlong ad02f65b54 Add UserResource and OIDC linking to Filament user menu 2026-04-26 16:38:43 -04:00
rlong c2c9464133 Implement OIDC authentication via Laravel Socialite 2026-04-26 16:32:53 -04:00
rlong c0176f9924 change winner form order to match paper 2026-04-26 16:07:32 -04:00
rlong ffa8d30be4 Merge pull request 'change phone number display' (#5) from format-phone-numbers into master
Reviewed-on: #5
2026-04-26 15:25:12 -04:00
rlong d64e1d5578 change phone number display 2026-04-26 15:24:05 -04:00
rlong ad66fef19b fix menu location 2026-04-26 15:08:47 -04:00
rlong 5a7684bc8c move menu item 2026-04-26 15:08:00 -04:00
rlong aed29fbf56 Merge pull request 'Add customer-facing check for winning items' (#4) from North-Hackathon/silent-auction:bidder-facing-checkout into master
Reviewed-on: #4
2026-04-26 15:05:13 -04:00
rlong 816fba5121 Merge pull request 'feat: implement searchable selects for bidder and item lookups using Select2' (#3) from feature/searchable-selects into master
Reviewed-on: #3
2026-04-26 15:01:31 -04:00
rlong ddbfc642f2 feat: implement searchable selects for bidder and item lookups using Select2 2026-04-25 11:55:52 -04:00
rlong b6db2f200b Add customer-facing check for winning items 2026-04-24 15:56:29 -04:00
rlong ef4ef144a6 Merge pull request 'v5 update fixes' (#2) from v5-upgrade into master
Reviewed-on: #2
2026-04-20 15:16:51 -04:00
rlong 7a338c6a31 fix 2026-04-20 15:12:10 -04:00
rlong 44521ab677 fix 2026-04-20 15:11:05 -04:00
rlong 4b6839aafa fix 2026-04-20 15:08:46 -04:00
rlong 186865890d fix 2026-04-20 15:08:25 -04:00
rlong cfc8f58a1e fix 2026-04-20 15:07:57 -04:00
rlong 59f6c733ac fix 2026-04-20 15:06:55 -04:00
rlong a4fff7aea3 fix 2026-04-20 15:05:51 -04:00
rlong 47ae95f060 fix 2026-04-20 15:05:28 -04:00
rlong 377cc4ab77 fix 2026-04-20 15:04:39 -04:00
rlong 947fb290f6 fix 2026-04-20 15:02:58 -04:00
rlong 0c794c89a4 fix 2026-04-20 15:02:03 -04:00
rlong 55925c8abf fix 2026-04-20 14:59:31 -04:00
rlong 20349e57c4 fix 2026-04-20 14:56:30 -04:00
rlong 10aa32e19c undo fixes 2026-04-20 14:51:30 -04:00
rlong 8bd68a42bd fix 419 2026-04-20 14:51:04 -04:00
rlong fc96cb96ed fix relation 2026-04-20 14:49:29 -04:00
rlong d25890d3ac fix relation 2026-04-20 14:43:48 -04:00
rlong f6df7aa08e change session driver to database 2026-04-20 14:40:21 -04:00
rlong db1d4ba165 test 2026-04-20 14:30:41 -04:00
rlong a30b70bf27 fix actions 2026-04-20 14:29:39 -04:00
rlong 193d7ecb1f fix action 2026-04-20 14:28:35 -04:00
rlong a01afdc321 cleanup actions 2026-04-20 14:26:18 -04:00
rlong ee526dce89 test relationship fix 2026-04-20 14:09:11 -04:00
rlong 5eea2de51e fix actions 2026-04-20 14:06:25 -04:00
rlong 48fd3d2b35 fix actions 2026-04-20 14:03:00 -04:00
rlong 237fe9f07b action fix 2026-04-20 14:01:34 -04:00
rlong bab18b6d26 actions fix 2026-04-20 14:00:36 -04:00
rlong 6d8f2b8ead test actions fix 2026-04-20 13:59:32 -04:00
rlong 849794ff90 v5 update fixes 2026-04-20 13:48:05 -04:00
rlong 24beacae7e fix money 2026-04-20 13:19:59 -04:00
rlong 4283399ffa fix money 2026-04-20 13:19:24 -04:00
rlong de1443b300 fix money 2026-04-20 13:18:51 -04:00
rlong 02f0fed769 test money fix 2026-04-20 13:16:35 -04:00
rlong 87f9befa72 more sorting 2026-04-20 13:11:55 -04:00
rlong d32c2d6a99 add sorting 2026-04-20 13:09:11 -04:00
rlong e3a64c6ba3 fix score display 2026-04-20 13:08:15 -04:00
rlong 9326fb5026 fix score display 2026-04-20 13:07:46 -04:00
rlong bdd06abcd1 fix filament winner display 2026-04-20 13:05:12 -04:00
rlong 72dfb16018 Merge pull request 'upgrade to new versions' (#1) from upgrade-laravel-filament into master
Reviewed-on: #1
2026-04-20 13:02:12 -04:00
rlong 2374d02670 upgrade to new versions 2026-04-20 12:56:52 -04:00
rlong 472cb78ffb cleanup old winner tabulation 2026-04-20 10:15:08 -04:00
rlong a99021587e add score to winner table 2026-04-20 10:08:56 -04:00
rlong 13837faaa5 add score to winner table 2026-04-20 10:07:36 -04:00
rlong 9954817c16 add score to winner table 2026-04-20 10:06:23 -04:00
rlong c13238014a add score to winner table 2026-04-20 10:03:36 -04:00
rlong f9d2fcfa06 add score to winner table 2026-04-20 10:01:21 -04:00
rlong 3431bef787 Fix sort 2026-04-20 09:51:39 -04:00
rlong 47bf882702 Fix sort 2026-04-20 09:41:49 -04:00
rlong 70c0e1f768 Fix sort 2026-04-20 09:39:54 -04:00
rlong 894fecf6b8 Fix sort 2026-04-20 09:39:30 -04:00
rlong 9051c8bd25 Fix sort 2026-04-20 09:35:55 -04:00
rlong efa24f90ce Fix sort 2026-04-20 09:34:55 -04:00
rlong eeb38a367e Fix sort 2026-04-20 09:32:35 -04:00
rlong d113d44463 Fix sort 2026-04-20 09:28:28 -04:00
rlong 085ae34e89 Fix sort 2026-04-20 09:27:41 -04:00
rlong 1969b7edc8 Fix sort 2026-04-20 09:25:41 -04:00
rlong 2fa2c0b9f7 Fix sort 2026-04-20 09:22:19 -04:00
rlong cb990adb2a Fix sort 2026-04-20 09:04:18 -04:00
rlong dae9f6f39e Fix sort 2026-04-20 08:48:24 -04:00
rlong a5e6b5f8d6 Fix sort 2026-04-20 08:46:46 -04:00
rlong e5097cf466 fix command 2026-04-16 16:05:25 -04:00
rlong ecb1dc2bcf fix route 2026-04-16 16:03:04 -04:00
rlong 3390f66226 update sort 2026-04-16 16:01:20 -04:00
rlong e7c539e4ef test new pages 2026-04-16 15:50:03 -04:00
rlong 330e210fde disable registration 2025-07-14 11:06:05 -04:00
rlong 7053ce029b composer update 2025-07-12 13:44:39 -04:00
rlong 2823e03793 update judging categories 2025-05-19 12:14:14 -04:00
rlong 42067a7b04 fix years for categories 2024-05-12 15:01:21 -04:00
rlong 9e65a3731c fix typo 2024-05-08 19:25:39 -04:00
rlong 4bdf14de83 fix typo 2024-05-08 19:09:44 -04:00
rlong 141d6c25fa adjust year categories 2024-03-16 13:39:58 -04:00
rlong 11ef29d89c remove stats dir 2024-03-16 13:24:54 -04:00
rlong a2ef1742af update vehicle registration form 2023-04-13 16:41:15 -04:00
rlong 4cc8296049 Fix typo 2023-04-12 19:39:09 -04:00
rlong d0dd8d35a9 Update tabulation for new year 2023-04-12 19:31:00 -04:00
rlong 4fb991e4c0 Merge branch 'upgrades-and-filament' into 'master'
Upgrades and filament

See merge request tfmm/Silent-Auction!1
2023-03-16 18:24:24 +00:00
985 changed files with 68473 additions and 10197 deletions
+13
View File
@@ -33,3 +33,16 @@ MAIL_FROM_NAME=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
OIDC_BASE_URL=
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_REDIRECT_URI="${APP_URL}/auth/social/oidc/callback"
NORTH_CHECKOUT_ID=
NORTH_PROFILE_ID=
NORTH_PRIVATE_API_KEY=
AUTO_PRINT_ENABLED=false
PRINTER_EMAIL=
+1
View File
@@ -12,3 +12,4 @@ npm-debug.log
/public/rldbadm
/stats
/.well-known
.DS_Store
+1
View File
@@ -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,"Tests\\Unit\\PrinterServiceTest::test_printPickupSlip_sends_email_when_enabled":7},"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,"Tests\\Unit\\PrinterServiceTest::test_printPickupSlip_sends_email_when_enabled":0.019,"Tests\\Unit\\PrinterServiceTest::test_printPickupSlip_does_not_send_email_when_disabled":0.001,"Tests\\Unit\\PrinterServiceTest::test_printForCheckout_calls_printPickupSlip_with_correct_data":0.09}}
+100 -288
View File
@@ -3,307 +3,119 @@
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Bidders;
use App\Models\CarShowCategory;
use App\Models\CarShowWinner;
use App\Models\PeoplesChoice;
use App\Models\Vehicles;
use App\Models\VehicleScores;
use Illuminate\Support\Facades\DB;
class TabulateWinners extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'carshow:tabulatewinners';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Tabulate Show Winners, and add them to the CarShowWinner table';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
protected $description = 'Tabulate Show Winners. Year Category 1st places can overlap with Best in Show/People\'s Choice.';
public function handle()
{
function bestInShowWinner()
{
$bestInShowWinnerQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $bestInShowWinnerQuery->vehicle;
}
function bestInShow2ndWinner()
{
$bestInShow2ndWinnerQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $bestInShow2ndWinnerQuery->vehicle;
}
function pcWinner()
{
$peoplesChoiceWinnerQuery = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->groupBy('peoples_choice.vehicle')
->selectRaw('*, sum(pc_count) as totalscore')
->whereNotIn('vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $peoplesChoiceWinnerQuery->vehicle;
}
function pc2ndWinner()
{
$peoplesChoice2ndWinnerQuery = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->groupBy('peoples_choice.vehicle')
->selectRaw('*, sum(pc_count) as totalscore')
->whereNotIn('vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $peoplesChoice2ndWinnerQuery->vehicle;
}
function zeroTo43Winner()
{
$zeroTo43Query = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 0)
->where('vehicles.year', '<=', 1943)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $zeroTo43Query->vehicle;
}
function zeroTo432ndWinner()
{
$zeroTo432ndQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 0)
->where('vehicles.year', '<=', 1943)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $zeroTo432ndQuery->vehicle;
}
function fortyFourToNinetySevenWinner()
{
$fortyFourToNinetySevenQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1944)
->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $fortyFourToNinetySevenQuery->vehicle;
}
function fortyFourToNinetySeven2ndWinner()
{
$fortyFourToNinetySeven2ndQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1944)
->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $fortyFourToNinetySeven2ndQuery->vehicle;
}
function NinetyEightToCurrentWinner()
{
$NinetyEightToCurrentQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1998)
//->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $NinetyEightToCurrentQuery->vehicle;
}
function NinetyEightToCurrent2ndWinner()
{
$NinetyEightToCurrent2ndQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1998)
//->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $NinetyEightToCurrent2ndQuery->vehicle;
}
// Truncate table first
CarShowWinner::truncate();
//Insert Best In Show Winner
CarShowWinner::updateOrCreate(
[
'category' => '6',
'place' => 'first'
],
[
'vehicle' => bestInShowWinner()
]
);
/*
//Insert Best In Show 2nd Place Winner
CarShowWinner::updateOrCreate(
[
'category' => '6',
'place' => 'second'
],
[
'vehicle' => bestInShow2ndWinner()
]
);
*/
//Insert People's Choice Winner
CarShowWinner::updateOrCreate(
[
'category' => '3',
'place' => 'first'
],
[
'vehicle' => pcWinner()
]
);
/*
CarShowWinner::updateOrCreate(
[
'category' => '3',
'place' => 'second'
],
[
'vehicle' => pc2ndWinner()
]
);
*/
//Insert Year Award Winners
//0-1943
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'first'
],
[
'vehicle' => zeroTo43Winner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'second'
],
[
'vehicle' => zeroTo432ndWinner()
]
);
//1944-1997
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'first'
],
[
'vehicle' => fortyFourToNinetySevenWinner()
]
);
$this->info('Starting tabulation...');
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'second'
],
[
'vehicle' => fortyFourToNinetySeven2ndWinner()
]
);
//1998-Current
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'first'
],
[
'vehicle' => NinetyEightToCurrentWinner()
]
);
// 2. BEST IN SHOW (Category 6)
$this->recordJudgedWinners(6, 'first', null, null, true);
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'second'
],
[
'vehicle' => NinetyEightToCurrent2ndWinner()
]
);
// 3. PEOPLE'S CHOICE (Category 3)
$this->recordPeoplesChoiceWinners(3, 'first');
// 4. YEAR CATEGORIES
$yearConfigs = [
['id' => 17, 'name' => '0-1942', 'start' => 0, 'end' => 1942],
['id' => 18, 'name' => '1943-1969', 'start' => 1943, 'end' => 1969],
['id' => 20, 'name' => '1970-2000', 'start' => 1970, 'end' => 2000],
['id' => 19, 'name' => '2001-Current', 'start' => 2001, 'end' => 2026],
];
foreach ($yearConfigs as $config) {
$this->info("Processing Category: {$config['name']}");
$this->recordJudgedWinners($config['id'], 'first', $config['start'], $config['end'], false);
$this->recordJudgedWinners($config['id'], 'second', $config['start'], $config['end'], true);
$this->recordJudgedWinners($config['id'], 'third', $config['start'], $config['end'], true);
$this->recordJudgedWinners($config['id'], 'fourth', $config['start'], $config['end'], true);
$this->recordJudgedWinners($config['id'], 'fifth', $config['start'], $config['end'], true);
}
$this->info('Winners tabulated successfully.');
}
}
private function recordJudgedWinners($categoryId, $place, $startYear = null, $endYear = null, $excludeExisting = true)
{
$query = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->where('vehicles.doNotJudge', 0);
if ($excludeExisting) {
$query->whereNotIn('vehicle_scores.vehicle', function ($q) {
$q->select('vehicle')->from('car_show_winners');
});
}
if ($startYear !== null) $query->where('vehicles.year', '>=', $startYear);
if ($endYear !== null) $query->where('vehicles.year', '<=', $endYear);
$maxScore = (clone $query)
->groupBy('vehicles.id')
->selectRaw('sum(vehicle_scores.overall_score) as totalscore')
->orderBy('totalscore', 'desc')
->value('totalscore');
if ($maxScore) {
$winners = $query->selectRaw('vehicles.id as vehicle_id, sum(vehicle_scores.overall_score) as totalscore')
->groupBy('vehicles.id')
->having('totalscore', '=', $maxScore)
->get();
foreach ($winners as $winner) {
CarShowWinner::updateOrCreate([
'category' => $categoryId,
'place' => $place,
'vehicle' => $winner->vehicle_id
], [
// Added totalscore here
'total_score' => $winner->totalscore
]);
}
}
}
private function recordPeoplesChoiceWinners($categoryId, $place)
{
$maxVotes = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->where('vehicles.doNotJudge', 0)
->whereNotIn('peoples_choice.vehicle', function ($q) {
$q->select('vehicle')->from('car_show_winners');
})
->groupBy('peoples_choice.vehicle')
->selectRaw('sum(pc_count) as totalvotes')
->orderBy('totalvotes', 'desc')
->value('totalvotes');
if ($maxVotes) {
$winners = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->selectRaw('peoples_choice.vehicle as vehicle_id, sum(pc_count) as totalvotes')
->where('vehicles.doNotJudge', 0)
->whereNotIn('peoples_choice.vehicle', function ($q) {
$q->select('vehicle')->from('car_show_winners');
})
->groupBy('peoples_choice.vehicle')
->having('totalvotes', '=', $maxVotes)
->get();
foreach ($winners as $winner) {
CarShowWinner::create([
'category' => $categoryId,
'place' => $place,
'vehicle' => $winner->vehicle_id,
// Added totalvotes here
'total_score' => $winner->totalvotes
]);
}
}
}
}
@@ -0,0 +1,309 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Bidders;
use App\Models\CarShowCategory;
use App\Models\CarShowWinner;
use App\Models\PeoplesChoice;
use App\Models\Vehicles;
use App\Models\VehicleScores;
use Illuminate\Support\Facades\DB;
class TabulateWinners extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'carshow:tabulatewinners';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Tabulate Show Winners, and add them to the CarShowWinner table';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
function bestInShowWinner()
{
$bestInShowWinnerQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $bestInShowWinnerQuery->vehicle;
}
function bestInShow2ndWinner()
{
$bestInShow2ndWinnerQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $bestInShow2ndWinnerQuery->vehicle;
}
function pcWinner()
{
$peoplesChoiceWinnerQuery = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->groupBy('peoples_choice.vehicle')
->selectRaw('*, sum(pc_count) as totalscore')
->whereNotIn('vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $peoplesChoiceWinnerQuery->vehicle;
}
function pc2ndWinner()
{
$peoplesChoice2ndWinnerQuery = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->groupBy('peoples_choice.vehicle')
->selectRaw('*, sum(pc_count) as totalscore')
->whereNotIn('vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $peoplesChoice2ndWinnerQuery->vehicle;
}
function zeroTo43Winner()
{
$zeroTo43Query = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 0)
->where('vehicles.year', '<=', 1943)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $zeroTo43Query->vehicle;
}
function zeroTo432ndWinner()
{
$zeroTo432ndQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 0)
->where('vehicles.year', '<=', 1943)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $zeroTo432ndQuery->vehicle;
}
function fortyFourToNinetySevenWinner()
{
$fortyFourToNinetySevenQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1944)
->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $fortyFourToNinetySevenQuery->vehicle;
}
function fortyFourToNinetySeven2ndWinner()
{
$fortyFourToNinetySeven2ndQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1944)
->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $fortyFourToNinetySeven2ndQuery->vehicle;
}
function NinetyEightToCurrentWinner()
{
$NinetyEightToCurrentQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1998)
//->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $NinetyEightToCurrentQuery->vehicle;
}
function NinetyEightToCurrent2ndWinner()
{
$NinetyEightToCurrent2ndQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1998)
//->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $NinetyEightToCurrent2ndQuery->vehicle;
}
// Truncate table first
CarShowWinner::truncate();
//Insert Best In Show Winner
CarShowWinner::updateOrCreate(
[
'category' => '6',
'place' => 'first'
],
[
'vehicle' => bestInShowWinner()
]
);
/*
//Insert Best In Show 2nd Place Winner
CarShowWinner::updateOrCreate(
[
'category' => '6',
'place' => 'second'
],
[
'vehicle' => bestInShow2ndWinner()
]
);
*/
//Insert People's Choice Winner
CarShowWinner::updateOrCreate(
[
'category' => '3',
'place' => 'first'
],
[
'vehicle' => pcWinner()
]
);
/*
CarShowWinner::updateOrCreate(
[
'category' => '3',
'place' => 'second'
],
[
'vehicle' => pc2ndWinner()
]
);
*/
//Insert Year Award Winners
//0-1943
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'first'
],
[
'vehicle' => zeroTo43Winner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'second'
],
[
'vehicle' => zeroTo432ndWinner()
]
);
//1944-1997
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'first'
],
[
'vehicle' => fortyFourToNinetySevenWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'second'
],
[
'vehicle' => fortyFourToNinetySeven2ndWinner()
]
);
//1998-Current
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'first'
],
[
'vehicle' => NinetyEightToCurrentWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'second'
],
[
'vehicle' => NinetyEightToCurrent2ndWinner()
]
);
}
}
@@ -0,0 +1,309 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Bidders;
use App\Models\CarShowCategory;
use App\Models\CarShowWinner;
use App\Models\PeoplesChoice;
use App\Models\Vehicles;
use App\Models\VehicleScores;
use Illuminate\Support\Facades\DB;
class TabulateWinners extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'carshow:tabulatewinners';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Tabulate Show Winners, and add them to the CarShowWinner table';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
function bestInShowWinner()
{
$bestInShowWinnerQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $bestInShowWinnerQuery->vehicle;
}
function bestInShow2ndWinner()
{
$bestInShow2ndWinnerQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $bestInShow2ndWinnerQuery->vehicle;
}
function pcWinner()
{
$peoplesChoiceWinnerQuery = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->groupBy('peoples_choice.vehicle')
->selectRaw('*, sum(pc_count) as totalscore')
->whereNotIn('vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $peoplesChoiceWinnerQuery->vehicle;
}
function pc2ndWinner()
{
$peoplesChoice2ndWinnerQuery = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
->groupBy('peoples_choice.vehicle')
->selectRaw('*, sum(pc_count) as totalscore')
->whereNotIn('vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $peoplesChoice2ndWinnerQuery->vehicle;
}
function zeroTo42Winner()
{
$zeroTo43Query = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 0)
->where('vehicles.year', '<=', 1942)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $zeroTo43Query->vehicle;
}
function fortyThreeToSixtyNineWinner()
{
$fortyThreeToSixtyNineQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1943)
->where('vehicles.year', '<=', 1969)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $fortyThreeToSixtyNineQuery->vehicle;
}
function seventyToTwoThousandWinner()
{
$seventyToTwoThousandQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 1970)
->where('vehicles.year', '<=', 2000)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $seventyToTwoThousandQuery->vehicle;
}
function TwoThousandOneToCurrentWinner()
{
$TwoThousandOneToCurrentQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
->groupBy('vehicles.id')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->whereNotIn('vehicle_scores.vehicle', function($query){
$query->select('vehicle')->from('car_show_winners');
})
->where('vehicles.year', '>=', 2001)
//->where('vehicles.year', '<=', 1997)
->where('vehicles.doNotJudge', '=', 0)
->orderBy('totalscore','desc')
->first();
return $TwoThousandOneToCurrentQuery->vehicle;
}
// Truncate table first
CarShowWinner::truncate();
//Insert Best In Show Winner
CarShowWinner::updateOrCreate(
[
'category' => '6',
'place' => 'first'
],
[
'vehicle' => bestInShowWinner()
]
);
//Insert People's Choice Winner
CarShowWinner::updateOrCreate(
[
'category' => '3',
'place' => 'first'
],
[
'vehicle' => pcWinner()
]
);
//Insert Year Award Winners
//0-1942
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'first'
],
[
'vehicle' => zeroTo42Winner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'second'
],
[
'vehicle' => zeroTo42Winner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '17',
'place' => 'third'
],
[
'vehicle' => zeroTo42Winner()
]
);
//1943-1969
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'first'
],
[
'vehicle' => fortyThreeToSixtyNineWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'second'
],
[
'vehicle' => fortyThreeToSixtyNineWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '18',
'place' => 'third'
],
[
'vehicle' => fortyThreeToSixtyNineWinner()
]
);
//1970-2000
CarShowWinner::updateOrCreate(
[
'category' => '20',
'place' => 'first'
],
[
'vehicle' => seventyToTwoThousandWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '20',
'place' => 'second'
],
[
'vehicle' => seventyToTwoThousandWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '20',
'place' => 'third'
],
[
'vehicle' => seventyToTwoThousandWinner()
]
);
//2001-Current
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'first'
],
[
'vehicle' => TwoThousandOneToCurrentWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'second'
],
[
'vehicle' => TwoThousandOneToCurrentWinner()
]
);
CarShowWinner::updateOrCreate(
[
'category' => '19',
'place' => 'third'
],
[
'vehicle' => TwoThousandOneToCurrentWinner()
]
);
}
}
+29 -22
View File
@@ -5,15 +5,19 @@ namespace App\Filament\Resources;
use App\Filament\Resources\BiddersResource\Pages;
use App\Filament\Resources\BiddersResource\RelationManagers;
use App\Models\Bidders;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class BiddersResource extends Resource
{
@@ -21,14 +25,14 @@ class BiddersResource extends Resource
protected static ?string $recordTitleAttribute = 'idbidders';
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Silent Auction';
protected static string | UnitEnum | null $navigationGroup = 'Silent Auction';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
TextInput::make('bidder_fname')->label('First Name'),
TextInput::make('bidder_lname')->label('Last Name'),
TextInput::make('bidder_addr')->label('Address'),
@@ -36,7 +40,7 @@ class BiddersResource extends Resource
TextInput::make('bidder_state')->label('State'),
TextInput::make('bidder_zip')->label('Zip'),
TextInput::make('bidder_phone')->label('Phone Number')
->mask(fn (TextInput\Mask $mask) => $mask->pattern('(000)000-0000')),
->mask('(999) 999-9999'),
TextInput::make('bidder_email')->label('Email'),
TextInput::make('bidder_assigned_number')->label('Assigned Number'),
]);
@@ -46,24 +50,27 @@ class BiddersResource extends Resource
{
return $table
->columns([
TextColumn::make('bidder_assigned_number')->sortable()->label('Assigned Number'),
TextColumn::make('bidder_fname')->sortable()->label('First Name'),
TextColumn::make('bidder_lname')->sortable()->label('Last Name'),
TextColumn::make('bidder_addr')->label('Address'),
TextColumn::make('bidder_city')->label('City'),
TextColumn::make('bidder_state')->label('State'),
TextColumn::make('bidder_zip')->label('Zip'),
TextColumn::make('bidder_phone')->label('Phone Number'),
TextColumn::make('bidder_email')->label('Email'),
TextColumn::make('bidder_assigned_number')->sortable()->label('Assigned Number')->sortable(),
TextColumn::make('bidder_fname')->sortable()->label('First Name')->sortable(),
TextColumn::make('bidder_lname')->sortable()->label('Last Name')->sortable(),
TextColumn::make('bidder_addr')->label('Address')->sortable(),
TextColumn::make('bidder_city')->label('City')->sortable(),
TextColumn::make('bidder_state')->label('State')->sortable(),
TextColumn::make('bidder_zip')->label('Zip')->sortable(),
TextColumn::make('bidder_phone')->label('Phone Number')->sortable()
->formatStateUsing(fn ($state) => \App\Helpers\PhoneHelper::format($state)),
TextColumn::make('bidder_email')->label('Email')->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->defaultSort('bidder_assigned_number');
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\BiddersResource\Pages;
use App\Filament\Resources\BiddersResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateBidders extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\BiddersResource\Pages;
use App\Filament\Resources\BiddersResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditBidders extends EditRecord
{
protected static string $resource = BiddersResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\BiddersResource\Pages;
use App\Filament\Resources\BiddersResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListBidders extends ListRecords
{
protected static string $resource = BiddersResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,12 +3,18 @@
namespace App\Filament\Resources\BiddersResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\EditAction;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Tables\Columns\TextColumn;
class CheckoutRelationManager extends RelationManager
{
@@ -16,43 +22,43 @@ class CheckoutRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'bidder_num';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('bidder_num')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('bidders.bidder_assigned_number')
TextColumn::make('bidders.bidder_assigned_number')
->label('Bidder Number')
->sortable(),
Tables\Columns\TextColumn::make('winnertotal')
TextColumn::make('winnertotal')
->label('Total Amount')
->money('usd', 'true')
->money('USD')
->sortable(),
Tables\Columns\TextColumn::make('paymentMethod.pm_name')
TextColumn::make('paymentMethod.pm_name')
->label('Payment Method')
->sortable(),
])
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,24 +3,29 @@
namespace App\Filament\Resources\BiddersResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use App\Models\CarShowCategory;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Tables\Columns\IconColumn;
class VehiclesRelationManager extends RelationManager
{
protected static string $relationship = 'vehicles';
protected static ?string $recordTitleAttribute = 'owner';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('year')
->label('Year'),
Forms\Components\TextInput::make('make')
@@ -34,7 +39,7 @@ class VehiclesRelationManager extends RelationManager
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -53,10 +58,11 @@ class VehiclesRelationManager extends RelationManager
Tables\Columns\TextColumn::make('vehicleType.category_name')
->label('Type')
->sortable(),
Tables\Columns\BooleanColumn::make('doNotJudge')
IconColumn::make('doNotJudge')
->boolean()
->label('Judged?')
->sortable()
->falseIcon('heroicon-o-badge-check')
->falseIcon('heroicon-o-check-badge')
->trueIcon('heroicon-o-x-circle')
->trueColor('danger')
->falseColor('success'),
@@ -64,15 +70,15 @@ class VehiclesRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,13 +3,18 @@
namespace App\Filament\Resources\BiddersResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use App\Models\Bidders;
use Filament\Actions\EditAction;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class WinningBidsRelationManager extends RelationManager
{
@@ -17,10 +22,10 @@ class WinningBidsRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'winning_bidder_num';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\Select::make('winning_bidder_num')
->label('Winning Bidder Number')
->options(Bidders::pluck('bidder_assigned_number', 'idbidders'))
@@ -28,7 +33,7 @@ class WinningBidsRelationManager extends RelationManager
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -40,22 +45,22 @@ class WinningBidsRelationManager extends RelationManager
->sortable(),
Tables\Columns\TextColumn::make('winning_cost')
->label('Winning Bid Amt')
->money('usd', 'true')
->money('USD')
->sortable(),
])
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -6,30 +6,35 @@ use App\Filament\Resources\CarShowCategoryResource\Pages;
use App\Filament\Resources\CarShowCategoryResource\RelationManagers;
use App\Filament\Resources\CarShowCategoryResource\RelationManagers\VehicleRelationManager;
use App\Models\CarShowCategory;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\BooleanColumn;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class CarShowCategoryResource extends Resource
{
protected static ?string $model = CarShowCategory::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Car Show';
protected static string | UnitEnum | null $navigationGroup = 'Car Show';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
TextInput::make('category_name'),
Toggle::make('vehicle_type')->inline(false)
]);
@@ -40,16 +45,18 @@ class CarShowCategoryResource extends Resource
return $table
->columns([
TextColumn::make('category_name')->sortable(),
BooleanColumn::make('vehicle_type')->sortable(),
IconColumn::make('vehicle_type')->boolean()->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->defaultSort('category_name');
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\CarShowCategoryResource\Pages;
use App\Filament\Resources\CarShowCategoryResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateCarShowCategory extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\CarShowCategoryResource\Pages;
use App\Filament\Resources\CarShowCategoryResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditCarShowCategory extends EditRecord
{
protected static string $resource = CarShowCategoryResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\CarShowCategoryResource\Pages;
use App\Filament\Resources\CarShowCategoryResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListCarShowCategories extends ListRecords
{
protected static string $resource = CarShowCategoryResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,13 +3,19 @@
namespace App\Filament\Resources\CarShowCategoryResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\DissociateAction;
use Filament\Actions\AssociateAction;
class VehicleRelationManager extends RelationManager
{
protected static string $relationship = 'vehicle';
@@ -18,17 +24,17 @@ class VehicleRelationManager extends RelationManager
protected static ?string $inverseRelationship = 'vehicleType';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('id')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -41,18 +47,17 @@ class VehicleRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
Tables\Actions\AssociateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
DissociateAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
Tables\Actions\DissociateAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\DissociateBulkAction::make(),
->toolbarActions([
CreateAction::make(),
AssociateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -5,10 +5,8 @@ namespace App\Filament\Resources;
use App\Filament\Resources\CarShowWinnerResource\Pages;
use App\Filament\Resources\CarShowWinnerResource\RelationManagers;
use App\Models\CarShowWinner;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,19 +14,25 @@ use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\Select;
use App\Models\Vehicles;
use App\Models\CarShowCategory;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class CarShowWinnerResource extends Resource
{
protected static ?string $model = CarShowWinner::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Car Show';
protected static string | UnitEnum | null $navigationGroup = 'Car Show';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Select::make('vehicle')
->label('Vehicle')
->options(Vehicles::all()->pluck('owner', 'id'))
@@ -44,20 +48,23 @@ class CarShowWinnerResource extends Resource
{
return $table
->columns([
TextColumn::make('awardCategory.category_name')->label('Category'),
TextColumn::make('awardVehicle.owner')->label('Vehicle Number'),
TextColumn::make('awardVehicle.year')->label('Year'),
TextColumn::make('awardVehicle.make')->label('Make'),
TextColumn::make('awardVehicle.model')->label('Model'),
TextColumn::make('awardCategory.category_name')->label('Category')->sortable(),
TextColumn::make('awardVehicle.owner')->label('Vehicle Number')->sortable(),
TextColumn::make('total_score')->label('Total Score')->sortable(),
TextColumn::make('awardVehicle.year')->label('Year')->sortable(),
TextColumn::make('awardVehicle.make')->label('Make')->sortable(),
TextColumn::make('awardVehicle.model')->label('Model')->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\CarShowWinnerResource\Pages;
use App\Filament\Resources\CarShowWinnerResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateCarShowWinner extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\CarShowWinnerResource\Pages;
use App\Filament\Resources\CarShowWinnerResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditCarShowWinner extends EditRecord
{
protected static string $resource = CarShowWinnerResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\CarShowWinnerResource\Pages;
use App\Filament\Resources\CarShowWinnerResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListCarShowWinners extends ListRecords
{
protected static string $resource = CarShowWinnerResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,30 +3,34 @@
namespace App\Filament\Resources\CarShowWinnerResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class AwardCategoryRelationManager extends RelationManager
{
protected static string $relationship = 'awardCategory';
protected static ?string $recordTitleAttribute = 'id';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('id')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -36,15 +40,15 @@ class AwardCategoryRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,30 +3,34 @@
namespace App\Filament\Resources\CarShowWinnerResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class AwardVehicleRelationManager extends RelationManager
{
protected static string $relationship = 'awardVehicle';
protected static ?string $recordTitleAttribute = 'id';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('id')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -38,15 +42,15 @@ class AwardVehicleRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
+20 -23
View File
@@ -5,33 +5,36 @@ namespace App\Filament\Resources;
use App\Filament\Resources\CheckoutResource\Pages;
use App\Filament\Resources\CheckoutResource\RelationManagers;
use App\Models\Checkout;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\BooleanColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Toggle;
use App\Models\Bidders;
use App\Models\PaymentMethods;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class CheckoutResource extends Resource
{
protected static ?string $model = Checkout::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Silent Auction';
protected static string | UnitEnum | null $navigationGroup = 'Silent Auction';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Select::make('bidder_num')
->label('Bidder')
->options(
@@ -40,15 +43,7 @@ class CheckoutResource extends Resource
)
->searchable(),
TextInput::make('winnertotal')
->label('Total Amount')
->mask(
fn (TextInput\Mask $mask) => $mask->money(
prefix: '$',
thousandsSeparator: ',',
decimalPlaces: 2,
isSigned: false
)
),
->label('Total Amount'),
Select::make('payment_method')
->label('Payment Method')
->options(PaymentMethods::all()->pluck('pm_name', 'pm_id'))
@@ -65,7 +60,7 @@ class CheckoutResource extends Resource
->sortable(),
TextColumn::make('winnertotal')
->label('Total Amount')
->money('usd', 'true')
->money('USD')
->sortable(),
TextColumn::make('paymentMethod.pm_name')
->label('Payment Method')
@@ -74,11 +69,13 @@ class CheckoutResource extends Resource
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->defaultSort('bidders.bidder_assigned_number');
}
@@ -3,10 +3,20 @@
namespace App\Filament\Resources\CheckoutResource\Pages;
use App\Filament\Resources\CheckoutResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateCheckout extends CreateRecord
{
protected static string $resource = CheckoutResource::class;
protected function afterCreate(): void
{
try {
$printerService = app(\App\Services\PrinterService::class);
$printerService->printForCheckout($this->record);
} catch (\Exception $e) {
\Illuminate\Support\Facades\Log::error('Auto-print failed from Filament: ' . $e->getMessage());
}
}
}
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\CheckoutResource\Pages;
use App\Filament\Resources\CheckoutResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditCheckout extends EditRecord
{
protected static string $resource = CheckoutResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\CheckoutResource\Pages;
use App\Filament\Resources\CheckoutResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListCheckouts extends ListRecords
{
protected static string $resource = CheckoutResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,9 +3,9 @@
namespace App\Filament\Resources\CheckoutResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,10 +16,10 @@ class BiddersRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'bidder_num';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\Select::make('bidder_num')
->label('Number')
->required()
@@ -33,11 +33,11 @@ class BiddersRelationManager extends RelationManager
Forms\Components\TextInput::make('bidder_phone')->label('Phone Number'),
Forms\Components\TextInput::make('bidder_email')->label('Email'),
Forms\Components\TextInput::make('bidder_assigned_number')->label('Assigned Number'),
]),
]),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -56,7 +56,9 @@ class BiddersRelationManager extends RelationManager
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,9 +3,9 @@
namespace App\Filament\Resources\CheckoutResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,17 +16,17 @@ class PaymentMethodRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'payment_method';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('payment_method')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -43,7 +43,9 @@ class PaymentMethodRelationManager extends RelationManager
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
+22 -33
View File
@@ -5,54 +5,41 @@ namespace App\Filament\Resources;
use App\Filament\Resources\ItemsResource\Pages;
use App\Filament\Resources\ItemsResource\RelationManagers;
use App\Models\Items;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\BooleanColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class ItemsResource extends Resource
{
protected static ?string $model = Items::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Silent Auction';
protected static string | UnitEnum | null $navigationGroup = 'Silent Auction';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
TextInput::make('item_assigned_num')
->label('Item Number'),
TextInput::make('item_desc')
->label('Description'),
TextInput::make('item_min_bid')
->label('Minimum Bid')
->mask(
fn (TextInput\Mask $mask) => $mask->money(
prefix: '$',
thousandsSeparator: ',',
decimalPlaces: 2,
isSigned: false
)
),
->label('Minimum Bid'),
TextInput::make('item_est_value')
->label('Estimated Value')
->mask(
fn (TextInput\Mask $mask) => $mask->money(
prefix: '$',
thousandsSeparator: ',',
decimalPlaces: 2,
isSigned: false
)
),
->label('Estimated Value'),
]);
}
@@ -67,21 +54,23 @@ class ItemsResource extends Resource
->label('Description'),
TextColumn::make('item_min_bid')
->label('Minimum Bid')
->money('usd', 'true')
->money('USD')
->sortable(),
TextColumn::make('item_est_value')
->label('Estimated Value')
->money('usd', 'true')
->money('USD')
->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->defaultSort('item_assigned_num');
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\ItemsResource\Pages;
use App\Filament\Resources\ItemsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateItems extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\ItemsResource\Pages;
use App\Filament\Resources\ItemsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditItems extends EditRecord
{
protected static string $resource = ItemsResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\ItemsResource\Pages;
use App\Filament\Resources\ItemsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListItems extends ListRecords
{
protected static string $resource = ItemsResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,9 +3,9 @@
namespace App\Filament\Resources\ItemsResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,17 +16,17 @@ class WinningBidsRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'iditems';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('iditems')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -43,7 +43,9 @@ class WinningBidsRelationManager extends RelationManager
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
+18 -12
View File
@@ -5,28 +5,32 @@ namespace App\Filament\Resources;
use App\Filament\Resources\JudgesResource\Pages;
use App\Filament\Resources\JudgesResource\RelationManagers;
use App\Models\Judges;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class JudgesResource extends Resource
{
protected static ?string $model = Judges::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Car Show';
protected static string | UnitEnum | null $navigationGroup = 'Car Show';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
TextInput::make('judge_number'),
]);
}
@@ -40,11 +44,13 @@ class JudgesResource extends Resource
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\JudgesResource\Pages;
use App\Filament\Resources\JudgesResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateJudges extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\JudgesResource\Pages;
use App\Filament\Resources\JudgesResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditJudges extends EditRecord
{
protected static string $resource = JudgesResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\JudgesResource\Pages;
use App\Filament\Resources\JudgesResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListJudges extends ListRecords
{
protected static string $resource = JudgesResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,9 +3,9 @@
namespace App\Filament\Resources\JudgesResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,17 +16,17 @@ class VehicleScoresRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'judge';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('judge')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -43,7 +43,9 @@ class VehicleScoresRelationManager extends RelationManager
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
@@ -5,28 +5,32 @@ namespace App\Filament\Resources;
use App\Filament\Resources\PaymentMethodsResource\Pages;
use App\Filament\Resources\PaymentMethodsResource\RelationManagers;
use App\Models\PaymentMethods;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class PaymentMethodsResource extends Resource
{
protected static ?string $model = PaymentMethods::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Silent Auction';
protected static string | UnitEnum | null $navigationGroup = 'Silent Auction';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
TextInput::make('pm_name')
->label('Method Name'),
]);
@@ -43,11 +47,13 @@ class PaymentMethodsResource extends Resource
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\PaymentMethodsResource\Pages;
use App\Filament\Resources\PaymentMethodsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreatePaymentMethods extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\PaymentMethodsResource\Pages;
use App\Filament\Resources\PaymentMethodsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditPaymentMethods extends EditRecord
{
protected static string $resource = PaymentMethodsResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\PaymentMethodsResource\Pages;
use App\Filament\Resources\PaymentMethodsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListPaymentMethods extends ListRecords
{
protected static string $resource = PaymentMethodsResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,9 +3,9 @@
namespace App\Filament\Resources\PaymentMethodsResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,17 +16,17 @@ class CheckoutRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'payment_method';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('payment_method')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -43,7 +43,9 @@ class CheckoutRelationManager extends RelationManager
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
@@ -5,10 +5,11 @@ namespace App\Filament\Resources;
use App\Filament\Resources\PeoplesChoiceResource\Pages;
use App\Filament\Resources\PeoplesChoiceResource\RelationManagers;
use App\Models\PeoplesChoice;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,21 +17,24 @@ use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use App\Models\Vehicles;
use Filament\Forms\Components\Select;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class PeoplesChoiceResource extends Resource
{
protected static ?string $model = PeoplesChoice::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static ?string $navigationGroup = 'Car Show';
protected static ?string $pluralModelLabel = 'Peoples Choice';
public static function form(Form $form): Form
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static string | UnitEnum | null $navigationGroup = 'Car Show';
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Select::make('vehicle')
->label('Vehicle')
->options(Vehicles::all()->pluck('owner', 'id'))
@@ -43,20 +47,22 @@ class PeoplesChoiceResource extends Resource
{
return $table
->columns([
TextColumn::make('pc_count')->label('PC Vote Count'),
TextColumn::make('vehicles.owner')->label('Vehicle Number'),
TextColumn::make('vehicles.year')->label('Year'),
TextColumn::make('vehicles.make')->label('Make'),
TextColumn::make('vehicles.model')->label('Model'),
TextColumn::make('pc_count')->label('PC Vote Count')->sortable(),
TextColumn::make('vehicles.owner')->label('Vehicle Number')->sortable(),
TextColumn::make('vehicles.year')->label('Year')->sortable(),
TextColumn::make('vehicles.make')->label('Make')->sortable(),
TextColumn::make('vehicles.model')->label('Model')->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\PeoplesChoiceResource\Pages;
use App\Filament\Resources\PeoplesChoiceResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreatePeoplesChoice extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\PeoplesChoiceResource\Pages;
use App\Filament\Resources\PeoplesChoiceResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditPeoplesChoice extends EditRecord
{
protected static string $resource = PeoplesChoiceResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\PeoplesChoiceResource\Pages;
use App\Filament\Resources\PeoplesChoiceResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListPeoplesChoices extends ListRecords
{
protected static string $resource = PeoplesChoiceResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,9 +3,9 @@
namespace App\Filament\Resources\PeoplesChoiceResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -16,17 +16,17 @@ class VehiclesRelationManager extends RelationManager
protected static ?string $recordTitleAttribute = 'vehicle';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('vehicle')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -43,7 +43,9 @@ class VehiclesRelationManager extends RelationManager
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
+77
View File
@@ -0,0 +1,77 @@
<?php
namespace App\Filament\Resources;
use App\User;
use Filament\Resources\Resource;
use Filament\Tables\Table;
use Filament\Tables;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Support\Icons\Heroicon;
use BackedEnum;
class UserResource extends Resource
{
protected static ?string $model = User::class;
protected static ?string $recordTitleAttribute = 'name';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-users';
public static function form(Schema $schema): Schema
{
return $schema
->components([
TextInput::make('name')
->required()
->maxLength(255),
TextInput::make('email')
->email()
->required()
->maxLength(255),
TextInput::make('provider_name')
->label('OIDC Provider')
->disabled(),
TextInput::make('provider_id')
->label('OIDC ID')
->disabled(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name')->sortable()->searchable(),
TextColumn::make('email')->sortable()->searchable(),
TextColumn::make('provider_name')->label('OIDC Provider'),
TextColumn::make('provider_id')->label('OIDC ID'),
TextColumn::make('created_at')->dateTime()->sortable(),
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
public static function getPages(): array
{
return [
'index' => UserResource\Pages\ListUsers::route('/'),
'create' => UserResource\Pages\CreateUsers::route('/create'),
'edit' => UserResource\Pages\EditUsers::route('/{record}/edit'),
];
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use Filament\Resources\Pages\CreateRecord;
class CreateUsers extends CreateRecord
{
protected static string $resource = UserResource::class;
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use Filament\Resources\Pages\EditRecord;
class EditUsers extends EditRecord
{
protected static string $resource = UserResource::class;
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use Filament\Resources\Pages\ListRecords;
class ListUsers extends ListRecords
{
protected static string $resource = UserResource::class;
}
@@ -5,10 +5,11 @@ namespace App\Filament\Resources;
use App\Filament\Resources\VehicleScoresResource\Pages;
use App\Filament\Resources\VehicleScoresResource\RelationManagers;
use App\Models\VehicleScores;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -17,19 +18,22 @@ use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select;
use App\Models\Vehicles;
use App\Models\Judges;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class VehicleScoresResource extends Resource
{
protected static ?string $model = VehicleScores::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Car Show';
protected static string | UnitEnum | null $navigationGroup = 'Car Show';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Select::make('judge')
->label('Judge')
->options(Judges::all()->pluck('judge_number', 'id'))
@@ -55,11 +59,13 @@ class VehicleScoresResource extends Resource
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\VehicleScoresResource\Pages;
use App\Filament\Resources\VehicleScoresResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateVehicleScores extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\VehicleScoresResource\Pages;
use App\Filament\Resources\VehicleScoresResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditVehicleScores extends EditRecord
{
protected static string $resource = VehicleScoresResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\VehicleScoresResource\Pages;
use App\Filament\Resources\VehicleScoresResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListVehicleScores extends ListRecords
{
protected static string $resource = VehicleScoresResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,30 +3,34 @@
namespace App\Filament\Resources\VehicleScoresResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class JudgeRelationManager extends RelationManager
{
protected static string $relationship = 'judges';
protected static ?string $recordTitleAttribute = 'judge_number';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('judge_number')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -36,14 +40,16 @@ class JudgeRelationManager extends RelationManager
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
CreateAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,30 +3,34 @@
namespace App\Filament\Resources\VehicleScoresResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class ScoredVehicleRelationManager extends RelationManager
{
protected static string $relationship = 'scoredVehicle';
protected static ?string $recordTitleAttribute = 'id';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('owner')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -38,15 +42,15 @@ class ScoredVehicleRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
+22 -15
View File
@@ -5,33 +5,37 @@ namespace App\Filament\Resources;
use App\Filament\Resources\VehiclesResource\Pages;
use App\Filament\Resources\VehiclesResource\RelationManagers;
use App\Models\Vehicles;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\BooleanColumn;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Toggle;
use App\Models\Bidders;
use App\Models\CarShowCategory;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class VehiclesResource extends Resource
{
protected static ?string $model = Vehicles::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Car Show';
protected static string | UnitEnum | null $navigationGroup = 'Car Show';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Select::make('owner')
->label('Owner')
->options(Bidders::orderBy('bidder_assigned_number')->pluck('bidder_assigned_number', 'idbidders'))
@@ -68,10 +72,11 @@ class VehiclesResource extends Resource
TextColumn::make('vehicleType.category_name')
->label('Type')
->sortable(),
BooleanColumn::make('doNotJudge')
IconColumn::make('doNotJudge')
->label('Judged?')
->sortable()
->falseIcon('heroicon-o-badge-check')
->boolean()
->falseIcon('heroicon-o-check-badge')
->trueIcon('heroicon-o-x-circle')
->trueColor('danger')
->falseColor('success'),
@@ -85,11 +90,13 @@ class VehiclesResource extends Resource
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->defaultSort('vehicleOwner.bidder_assigned_number');
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\VehiclesResource\Pages;
use App\Filament\Resources\VehiclesResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateVehicles extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\VehiclesResource\Pages;
use App\Filament\Resources\VehiclesResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditVehicles extends EditRecord
{
protected static string $resource = VehiclesResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\VehiclesResource\Pages;
use App\Filament\Resources\VehiclesResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListVehicles extends ListRecords
{
protected static string $resource = VehiclesResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
@@ -3,30 +3,34 @@
namespace App\Filament\Resources\VehiclesResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class CarShowWinnerRelationManager extends RelationManager
{
protected static string $relationship = 'CarShowWinner';
protected static ?string $recordTitleAttribute = 'id';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\TextInput::make('id')
->required()
->maxLength(255),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -35,15 +39,15 @@ class CarShowWinnerRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,24 +3,28 @@
namespace App\Filament\Resources\VehiclesResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use App\Models\Bidders;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class VehicleOwnerRelationManager extends RelationManager
{
protected static string $relationship = 'vehicleOwner';
protected static ?string $recordTitleAttribute = 'owner';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\Select::make('owner')
->label('Owner Assigned Number')
->required()
@@ -39,11 +43,11 @@ class VehicleOwnerRelationManager extends RelationManager
Forms\Components\TextInput::make('bidder_phone')->label('Phone Number'),
Forms\Components\TextInput::make('bidder_email')->label('Email'),
Forms\Components\TextInput::make('bidder_assigned_number')->label('Assigned Number'),
]),
]),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -54,15 +58,15 @@ class VehicleOwnerRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,25 +3,29 @@
namespace App\Filament\Resources\VehiclesResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use App\Models\Vehicles;
use App\Models\Judges;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class VehicleScoresRelationManager extends RelationManager
{
protected static string $relationship = 'vehicleScores';
protected static ?string $recordTitleAttribute = 'id';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\Select::make('judge')
->label('Judge')
->options(Judges::all()->pluck('judge_number', 'id'))
@@ -35,7 +39,7 @@ class VehicleScoresRelationManager extends RelationManager
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -45,15 +49,15 @@ class VehicleScoresRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -3,24 +3,28 @@
namespace App\Filament\Resources\VehiclesResource\RelationManagers;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Schemas\Schema;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use App\Models\CarShowCategory;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class VehicleTypeRelationManager extends RelationManager
{
protected static string $relationship = 'vehicleType';
protected static ?string $recordTitleAttribute = 'id';
public static function form(Form $form): Form
public function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Forms\Components\Select::make('category_name')
->required()
->searchable()
@@ -28,11 +32,11 @@ class VehicleTypeRelationManager extends RelationManager
->createOptionForm([
Forms\Components\TextInput::make('category_name'),
Forms\Components\Toggle::make('vehicle_type')->inline(false),
]),
]),
]);
}
public static function table(Table $table): Table
public function table(Table $table): Table
{
return $table
->columns([
@@ -41,15 +45,15 @@ class VehicleTypeRelationManager extends RelationManager
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make(),
->recordActions([
EditAction::make(),
DeleteAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
+21 -24
View File
@@ -5,35 +5,37 @@ namespace App\Filament\Resources;
use App\Filament\Resources\WinningBidsResource\Pages;
use App\Filament\Resources\WinningBidsResource\RelationManagers;
use App\Models\WinningBids;
use Filament\Forms;
use Filament\Resources\Form;
use UnitEnum;
use BackedEnum;
use Filament\Schemas\Schema;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Columns\BooleanColumn;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use App\Models\Bidders;
use App\Models\Items;
use Filament\Forms\Components\Select;
use function Ramsey\Uuid\v1;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
class WinningBidsResource extends Resource
{
protected static ?string $model = WinningBids::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Silent Auction';
protected static string | UnitEnum | null $navigationGroup = 'Silent Auction';
public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
Select::make('winning_item_num')
->label('Item')
->options(Items::orderBy('item_assigned_num')->pluck('item_assigned_num', 'iditems'))
@@ -47,14 +49,7 @@ class WinningBidsResource extends Resource
->searchable(),
TextInput::make('winning_cost')
->label('Winning Bid')
->mask(
fn (TextInput\Mask $mask) => $mask->money(
prefix: '$',
thousandsSeparator: ',',
decimalPlaces: 2,
isSigned: false
)
),
->prefix('$'),
]);
}
@@ -73,17 +68,19 @@ class WinningBidsResource extends Resource
->sortable(),
TextColumn::make('winning_cost')
->label('Winning Bid Amt')
->money('usd', 'true')
->money('USD')
->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
->recordActions([
EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->defaultSort('items.item_assigned_num');
}
@@ -3,7 +3,7 @@
namespace App\Filament\Resources\WinningBidsResource\Pages;
use App\Filament\Resources\WinningBidsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateWinningBids extends CreateRecord
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\WinningBidsResource\Pages;
use App\Filament\Resources\WinningBidsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditWinningBids extends EditRecord
{
protected static string $resource = WinningBidsResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
@@ -3,14 +3,14 @@
namespace App\Filament\Resources\WinningBidsResource\Pages;
use App\Filament\Resources\WinningBidsResource;
use Filament\Pages\Actions;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListWinningBids extends ListRecords
{
protected static string $resource = WinningBidsResource::class;
protected function getActions(): array
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
+14
View File
@@ -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;
}
}
@@ -0,0 +1,68 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\Str;
class SocialiteController extends Controller
{
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
public function handleProviderCallback($provider)
{
try {
$socialUser = Socialite::driver($provider)->user();
} catch (\Exception $e) {
return redirect('/login')->with('error', 'Authentication failed.');
}
if (Auth::check()) {
$user = Auth::user();
$user->update([
'provider_name' => $provider,
'provider_id' => $socialUser->getId(),
]);
return redirect()->intended('/admin')->with('status', 'Account linked successfully!');
}
// Find user by provider_id
$user = User::where('provider_name', $provider)
->where('provider_id', $socialUser->getId())
->first();
if (!$user) {
// Find user by email to link
$user = User::where('email', $socialUser->getEmail())->first();
if ($user) {
// Link the account
$user->update([
'provider_name' => $provider,
'provider_id' => $socialUser->getId(),
]);
} else {
// Optionally create a new user
$user = User::create([
'name' => $socialUser->getName() ?? $socialUser->getNickname() ?? $socialUser->getEmail(),
'email' => $socialUser->getEmail(),
'provider_name' => $provider,
'provider_id' => $socialUser->getId(),
'password' => bcrypt(Str::random(24)),
]);
}
}
Auth::login($user);
return redirect()->intended('/admin'); // Redirect to filament admin or home
}
}
+1 -1
View File
@@ -7,7 +7,7 @@ use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
class Controller extends \Illuminate\Routing\Controller
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
@@ -0,0 +1,220 @@
<?php
namespace App\Http\Controllers;
use App\Models\Bidders;
use App\Models\Checkout;
use App\Models\WinningBids;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
class NorthCheckoutController extends Controller
{
public function checkout(Request $request, $bidder_id)
{
$bidder = Bidders::where('idbidders', $bidder_id)->firstOrFail();
// Check if already checked out
if (Checkout::where('bidder_num', $bidder->idbidders)->exists()) {
return redirect('/mywinnings?bidder_number=' . $bidder->bidder_assigned_number)->with('error', 'Bidder has already checked out.');
}
$winnings = WinningBids::where('winning_bidder_num', $bidder->idbidders)->get();
$total_cost = $winnings->sum('winning_cost');
if ($total_cost <= 0) {
return redirect('/mywinnings?bidder_number=' . $bidder->bidder_assigned_number)->with('error', 'No winnings found for this bidder.');
}
return view('north_checkout', [
'bidder' => $bidder,
'total_cost' => $total_cost,
]);
}
public function createSession(Request $request, $bidder_id)
{
$bidder = Bidders::findOrFail($bidder_id);
$winnings = WinningBids::with('items')->where('winning_bidder_num', $bidder->idbidders)->get();
$total_cost = $winnings->sum('winning_cost');
$products = $winnings->map(function($winning) {
return [
'name' => $winning->items->item_desc ?? 'Auction Item',
'price' => (float)$winning->winning_cost,
'quantity' => 1
];
})->toArray();
$apiKey = config('services.north.private_api_key');
$checkoutId = config('services.north.checkout_id');
$profileId = config('services.north.profile_id');
if (!$apiKey || !$checkoutId || !$profileId) {
return response()->json(['error' => 'North configuration missing.'], 500);
}
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . $apiKey,
'Accept' => 'application/json',
'Content-Type' => 'application/json',
])->post('https://checkout.north.com/api/sessions', [
'checkoutId' => $checkoutId,
'profileId' => $profileId,
'amount' => (float)$total_cost,
'products' => $products,
]);
if ($response->failed()) {
Log::error('North Session Creation Failed: ' . $response->status() . ' ' . $response->body());
return response()->json([
'error' => 'Failed to create checkout session: ' . ($response->json('message') ?? 'Unknown error'),
'status' => $response->status(),
'body' => $response->body()
], 500);
}
$data = $response->json();
// If json() is null but body is not empty, it might be a parsing error
if (is_null($data) && !empty($response->body())) {
Log::error('North Session Response is not JSON: ' . $response->body());
return response()->json([
'error' => 'Response from North is not valid JSON.',
'raw_body' => $response->body()
], 500);
}
$token = $data['token'] ??
$data['sessionToken'] ??
$data['id'] ??
$data['session_id'] ??
($data['session']['id'] ?? null);
if (!$token) {
Log::error('North Session Token Missing in Response: ' . json_encode($data));
return response()->json([
'error' => 'Session token not found in API response.',
'debug_response' => $data,
'raw_body' => $response->body()
], 500);
}
return response()->json(['sessionToken' => $token]);
}
public function verify(Request $request, $bidder_id)
{
$bidder = Bidders::findOrFail($bidder_id);
$sessionToken = $request->query('sessionToken');
if (!$sessionToken) {
return redirect('/mywinnings?bidder_number=' . $bidder->bidder_assigned_number)->with('error', 'Missing session token.');
}
$apiKey = config('services.north.private_api_key');
$checkoutId = config('services.north.checkout_id');
$profileId = config('services.north.profile_id');
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . $apiKey,
'SessionToken' => $sessionToken,
'CheckoutId' => $checkoutId,
'ProfileId' => $profileId,
'Accept' => 'application/json',
])->get('https://checkout.north.com/api/sessions/status');
if ($response->failed()) {
Log::error('North Session Verification Failed: ' . $response->status() . ' ' . $response->body());
return redirect('/mywinnings?bidder_number=' . $bidder->bidder_assigned_number)->with('error', 'Failed to verify payment status. Status: ' . $response->status());
}
$status = $response->json();
$currentStatus = $status['status'] ?? '';
// The North API status check might return Approved, completed, success, authorized, or captured.
$successStatuses = ['approved', 'completed', 'success', 'authorized', 'captured'];
if (in_array(strtolower($currentStatus), $successStatuses)) {
// Check if already checked out to avoid duplicates
$existingCheckout = Checkout::where('bidder_num', $bidder->idbidders)->first();
if (!$existingCheckout) {
// According to docs, when status is Approved, transaction details are in 'body'
// Digital wallets might have these at the top level
$body = $status['body'] ?? [];
$winnertotal = $status['amount'] ??
($body['amount'] ??
($status['amount_total'] ??
WinningBids::where('winning_bidder_num', $bidder->idbidders)->sum('winning_cost')));
$payment_method = 3; // Credit Card
$cc_transaction = $body['auth_guid'] ??
($status['transaction_id'] ??
($status['transactionId'] ??
($status['id'] ?? 'NORTH_EC')));
$cc_amount = $winnertotal;
$check_number = null;
$checkout_id = DB::table('checkout')->insertGetID(
[
'bidder_num' => $bidder->idbidders,
'winnertotal' => $winnertotal,
'payment_method' => $payment_method,
'check_number' => $check_number,
'cc_transaction' => $cc_transaction,
'cc_amount' => $cc_amount,
'created_at' => now(),
'updated_at' => now(),
]
);
} else {
$checkout_id = $existingCheckout->checkout_id;
$payment_method = $existingCheckout->payment_method;
$cc_transaction = $existingCheckout->cc_transaction;
$check_number = $existingCheckout->check_number;
}
// Replicate the data for checkout_complete view
$checkout_list_results = DB::select("SELECT
*, items.item_assigned_num, items.item_desc
FROM winning_bids
INNER JOIN items AS items
ON winning_bids.winning_item_num=items.iditems
WHERE winning_bidder_num = $bidder->idbidders
");
$checkout_info_results = DB::select("SELECT
winning_bids.*,
bidders.*,
sum(winning_cost) AS total_cost
FROM winning_bids
INNER JOIN bidders AS bidders
ON winning_bids.winning_bidder_num=bidders.idbidders
WHERE winning_bidder_num = $bidder->idbidders
GROUP BY winning_bids.winning_bidder_num
");
// Automatically print item pickup slips
try {
$printerService = app(\App\Services\PrinterService::class);
$printerService->printForCheckout(\App\Models\Checkout::find($checkout_id));
} catch (\Exception $e) {
\Illuminate\Support\Facades\Log::error('Auto-print failed: ' . $e->getMessage());
}
return view('checkout_complete', [
'checkout_result' => $checkout_id,
'checkout_list_results' => $checkout_list_results,
'checkout_info_results' => $checkout_info_results,
'payment_method' => $payment_method,
'check_number' => $check_number,
'cc_transaction' => $cc_transaction
]);
}
return redirect('/mywinnings?bidder_number=' . $bidder->bidder_assigned_number)->with('error', 'Payment not completed. Status: ' . ($status['status'] ?? 'unknown'));
}
}
+160 -43
View File
@@ -6,7 +6,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use View;
use App\helpers;
use PDF;
use Spatie\LaravelPdf\Facades\Pdf;
use App\Models\Bidders;
use App\Models\Items;
use App\Models\Checkout;
@@ -19,6 +19,7 @@ use App\Models\CarShowCategory;
use App\Models\Types;
use App\Models\Vehicles;
use App\Models\VehicleScores;
use Dompdf\Dompdf;
class PagesController extends Controller
{
@@ -81,7 +82,8 @@ class PagesController extends Controller
public function checkout(Request $checkout_req)
{
if (!$checkout_req->checkoutbiddernum) {
return view('checkout_select_form');
$bidders = \App\Models\Bidders::orderByRaw('CAST(bidder_assigned_number AS UNSIGNED) ASC')->get();
return view('checkout_select_form', ['bidders' => $bidders]);
} elseif (!$checkout_req->checkout_payment_method) {
$checkout_bidder = $checkout_req->checkoutbiddernum;
$checkout_list_results = DB::select("SELECT
@@ -139,6 +141,15 @@ class PagesController extends Controller
'cc_amount' => $cc_amount,
]
);
// Automatically print item pickup slips
try {
$printerService = app(\App\Services\PrinterService::class);
$printerService->printForCheckout(\App\Models\Checkout::find($checkout_result));
} catch (\Exception $e) {
\Illuminate\Support\Facades\Log::error('Auto-print failed: ' . $e->getMessage());
}
return view('checkout_complete', [
'checkout_result' => $checkout_result,
'checkout_list_results' => $checkout_list_results,
@@ -161,20 +172,32 @@ class PagesController extends Controller
public function editwinners(Request $edit_win_req)
{
if (!$edit_win_req->winid) {
return view('editwinners');
if ($edit_win_req->id) {
$winner = WinningBids::with(['items', 'bidders'])->find($edit_win_req->id);
$bidders = Bidders::all();
$items = Items::all();
return view('editwinners', ['winner' => $winner, 'bidders' => $bidders, 'items' => $items]);
}
if (!$edit_win_req->winid) {
$winners = WinningBids::with(['items', 'bidders'])->get();
return view('winnersbyitem', ['winnersbyitem_results' => $winners]);
}
$winning_bid_id = $edit_win_req->winid;
$winner_bidder = $edit_win_req->winnerbiddernum;
$winner_item = $edit_win_req->winneritemnum;
$winner_cost = $edit_win_req->winnerbid;
$winner_insert = WinningBids::where('idwinning_bids', $winning_bid_id)
->update(
[
'winning_bidder_num' => $winner_bidder,
'winning_item_num' => $winner_item,
'winning_cost' => $winner_cost
]
);
return redirect('editwinners');
return redirect('winnersbyitem');
}
public function finaltally()
@@ -250,10 +273,54 @@ class PagesController extends Controller
return view('receiptpdf', $checkout_data);
}
public function downloadReceiptPdf(Request $request)
{
$checkoutid = $request->checkout_id;
$checkout_final_results = Checkout::where('checkout_id', '=', $checkoutid)->first();
if (!$checkout_final_results) {
return redirect('/mywinnings')->with('error', 'Checkout record not found.');
}
$bidder_num = $checkout_final_results->bidder_num;
$checkout_list_results = DB::select("SELECT
*, items.item_assigned_num, items.item_desc
FROM winning_bids
INNER JOIN items AS items ON winning_bids.winning_item_num=items.iditems
WHERE winning_bidder_num = $bidder_num
");
$checkout_info_results = DB::select("SELECT
winning_bids.*,
bidders.*,
sum(winning_cost) AS total_cost
FROM winning_bids
INNER JOIN bidders AS bidders ON winning_bids.winning_bidder_num=bidders.idbidders
WHERE winning_bidder_num = $bidder_num
GROUP BY winning_bids.winning_bidder_num
");
$options = new \Dompdf\Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);
$html = view('receiptpdf', [
'checkout_final_results' => $checkout_final_results,
'checkout_list_results' => $checkout_list_results,
'checkout_info_results' => $checkout_info_results
])->render();
$dompdf->loadHtml($html);
$dompdf->setPaper('letter', 'portrait');
$dompdf->render();
return $dompdf->stream('receipt-'.$checkoutid.'.pdf');
}
public function reprintReceipt(Request $reprint_receipt_req)
{
if (!$reprint_receipt_req->reprintbiddernum) {
return view('reprint_receipt_form');
$bidders = Bidders::has('checkout')->get();
return view('reprint_receipt_form', ['bidders' => $bidders]);
} else {
$bidnum=$reprint_receipt_req->reprintbiddernum;
$checkout_result = Checkout::where('bidder_num', '=', $bidnum)
@@ -274,7 +341,9 @@ class PagesController extends Controller
public function winners(Request $winners_req)
{
if (!$winners_req->winnerbid) {
return view('winners');
$bidders = Bidders::all();
$items = Items::all();
return view('winners', ['bidders' => $bidders, 'items' => $items]);
}
$winner_item = $winners_req->winneritemnum;
$winner_bidder = $winners_req->winnerbiddernum;
@@ -291,22 +360,19 @@ class PagesController extends Controller
public function winnersbyitem()
{
$winnersbyitem_results = DB::select("SELECT
*
FROM winning_bids
INNER JOIN items as items
ON winning_bids.winning_item_num=items.iditems
INNER JOIN bidders AS bidders
ON winning_bids.winning_bidder_num=bidders.idbidders
ORDER BY item_assigned_num ASC
");
$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]);
}
public function winnertotal(Request $winnertotal_req)
{
if (!$winnertotal_req->winnerbiddernum) {
return view('winnertotalform');
$bidders = Bidders::all();
return view('winnertotalform', ['bidders' => $bidders]);
}
$winner_total_bidder = $winnertotal_req->winnerbiddernum;
$winnertotal_list_results = DB::select("SELECT
@@ -334,37 +400,41 @@ class PagesController extends Controller
public function winningbidderlist()
{
$winnerlist_results = WinningBids::join('bidders', 'winning_bids.winning_bidder_num', '=', 'bidders.idbidders')
->groupBy('winning_bidder_num')
->orderBy('bidders.bidder_assigned_number')
$winnerlist_results = Bidders::whereHas('winningBids')
->orderBy('bidder_assigned_number')
->get();
return view('winningbidderlist', ['winnerlist_results' => $winnerlist_results]);
return view('winningbidderlist', ['winning_bidders' => $winnerlist_results]);
}
public function judgingentry(Request $judgingentry_req)
{
if (!$judgingentry_req->vehnum) {
return view('judgingentry');
}
$vehicle = $judgingentry_req->vehnum;
$judge = $judgingentry_req->judgenum;
$score = $judgingentry_req->vehscore;
$bidder_insert = VehicleScores::updateOrCreate(
[
'vehicle' => $vehicle,
'judge' => $judge
],
[
'overall_score' => $score
]
);
$judges = \App\Models\Judges::all();
$vehicles = \App\Models\Vehicles::select('vehicles.*')
->leftJoin('bidders', 'vehicles.owner', '=', 'bidders.bidder_assigned_number')
->orderByRaw('CAST(bidders.bidder_assigned_number AS UNSIGNED) ASC')
->get();
return redirect('judgingentry');
if ($judgingentry_req->isMethod('post')) {
$vehicle = $judgingentry_req->vehnum;
$judge = $judgingentry_req->judgenum;
$score = $judgingentry_req->vehscore;
VehicleScores::updateOrCreate(
['vehicle' => $vehicle, 'judge' => $judge],
['overall_score' => $score]
);
return redirect('judgingentry');
}
return view('judgingentry', ['judges' => $judges, 'vehicles' => $vehicles]);
}
public function showcars(Request $showcar_req)
{
if (!$showcar_req->bidderlname) {
return view('showcars');
$vehicles = \App\Models\Vehicles::with('vehicleOwner')->get();
return view('showcars', ['vehicles' => $vehicles]);
}
$bidder_lname = $showcar_req->bidderlname;
$bidder_fname = $showcar_req->bidderfname;
@@ -423,7 +493,8 @@ class PagesController extends Controller
public function pcentry(Request $pcentry_req)
{
if (!$pcentry_req->vehnum) {
return view('pcentry');
$vehicles = Vehicles::all();
return view('pcentry', ['vehicles' => $vehicles]);
}
$vehicle=$pcentry_req->vehnum;
$pc_count=$pcentry_req->pc_count;
@@ -457,7 +528,8 @@ class PagesController extends Controller
public function awardcategories(Request $category_req)
{
if (!$category_req->category) {
return view('awardcategories');
$categories = CarShowCategory::all();
return view('awardcategories', ['categories' => $categories]);
}
$category = $category_req->category;
if ($category_req->has('vehtype')) {
@@ -479,17 +551,32 @@ class PagesController extends Controller
public function showwinners()
{
$carshowwinner_results = CarShowWinner::with(['awardCategory', 'awardVehicle', 'awardVehicle.vehicleOwner'])->get();
return view('carshowwinners', ['carshowwinner_results' => $carshowwinner_results]);
return view('carshowwinners', ['winners' => $carshowwinner_results]);
}
public function showscores()
{
$carshowscore_results = VehicleScores::with(['scoredVehicle'])
$carshowscore_results = VehicleScores::with(['scoredVehicle', 'scoredVehicle.vehicleOwner'])
->groupBy('vehicle')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
->orderBy('totalscore', 'desc')
->get();
return view('carshowscores', ['carshowscore_results' => $carshowscore_results]);
return view('carshowscores', ['scores_results' => $carshowscore_results]);
}
public function showscoresbycar()
{
$carshowscore2_results = VehicleScores::with(['scoredVehicle', 'scoredVehicle.vehicleOwner'])
->groupBy('vehicle')
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
//->orderBy('scoredVehicle.vehicleOwner.bidder_assigned_number')
->orderByRaw('CAST((
SELECT owner
FROM vehicles
WHERE vehicles.id = vehicle_scores.vehicle
LIMIT 1
) AS UNSIGNED) ASC')
->get();
return view('carshowscores', ['scores_results' => $carshowscore2_results]);
}
public function showcarlist()
{
$showcarlist_results = Bidders::has('vehicles')
@@ -500,4 +587,34 @@ class PagesController extends Controller
//dd($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');
$is_checked_out = \App\Models\Checkout::where('bidder_num', $bidder->idbidders)->exists();
return view('mywinnings_results', [
'bidder' => $bidder,
'winnings' => $winnings,
'total_cost' => $total_cost,
'is_checked_out' => $is_checked_out
]);
}
}
+58
View File
@@ -0,0 +1,58 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class PickupSlipMail extends Mailable
{
use Queueable, SerializesModels;
protected $pdfOutput;
/**
* Create a new message instance.
*/
public function __construct($pdfOutput)
{
$this->pdfOutput = $pdfOutput;
}
/**
* Get the message envelope.
*/
public function envelope(): Envelope
{
return new Envelope(
subject: 'Item Pickup Slip',
);
}
/**
* Get the message content definition.
*/
public function content(): Content
{
return new Content(
view: 'emails.pickup_slip',
);
}
/**
* Get the attachments for the message.
*
* @return array<int, Attachment>
*/
public function attachments(): array
{
return [
Attachment::fromData(fn () => $this->pdfOutput, 'pickup_slip.pdf')
->withMime('application/pdf'),
];
}
}
+7 -4
View File
@@ -24,10 +24,13 @@ class Bidders extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function checkout()
{
+8 -8
View File
@@ -9,19 +9,19 @@ class CarShowCategory extends Model
protected $table = 'car_show_categories';
protected static ?string $recordTitleAttribute = 'category_name';
protected $casts = [
'vehicle_type' => 'boolean',
];
protected $fillable = [
'category_name',
'vehicle_type'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'vehicle_type' => 'boolean',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function vehicle()
{
+11 -7
View File
@@ -10,21 +10,25 @@ class CarShowWinner extends Model
protected $fillable = [
'vehicle',
'category',
'place'
'place',
'total_score'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function awardVehicle()
{
return $this->hasMany('App\Models\Vehicles', 'id', 'vehicle');
return $this->belongsTo('App\Models\Vehicles', 'vehicle', 'id');
}
public function awardCategory()
{
return $this->hasMany('App\Models\CarShowCategory', 'id', 'category');
return $this->belongsTo('App\Models\CarShowCategory', 'category', 'id');
}
}
+8 -4
View File
@@ -21,10 +21,14 @@ class Checkout extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
'winnertotal' => 'integer',
];
}
public function bidders()
{
+7 -4
View File
@@ -19,10 +19,13 @@ class Items extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function winningBids()
{
+7 -4
View File
@@ -13,10 +13,13 @@ class Judges extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function vehicleScores()
{
+7 -4
View File
@@ -16,10 +16,13 @@ class PaymentMethods extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function checkout()
{
+7 -4
View File
@@ -14,10 +14,13 @@ class PeoplesChoice extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function vehicles()
{
+8 -5
View File
@@ -15,10 +15,13 @@ class VehicleScores extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function judges()
{
@@ -27,6 +30,6 @@ class VehicleScores extends Model
public function scoredVehicle()
{
return $this->hasMany('App\Models\Vehicles', 'id', 'vehicle');
return $this->belongsTo('App\Models\Vehicles', 'vehicle', 'id');
}
}
+8 -8
View File
@@ -8,10 +8,6 @@ class Vehicles extends Model
{
protected $table = 'vehicles';
protected $casts = [
'owner' => 'integer'
];
protected $fillable = [
'year',
'make',
@@ -21,10 +17,14 @@ class Vehicles extends Model
'owner'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'owner' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function vehicleType()
{
+8 -5
View File
@@ -18,14 +18,17 @@ class WinningBids extends Model
'updated_at'
];
protected $dates = [
'created_at',
'updated_at'
];
protected function casts(): array
{
return [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
public function items()
{
return $this->hasMany(Items::class, 'iditems', 'winning_item_num');
return $this->belongsTo(Items::class, 'winning_item_num', 'iditems');
}
public function bidders()
+3
View File
@@ -16,6 +16,9 @@ class EventServiceProvider extends ServiceProvider
'App\Events\Event' => [
'App\Listeners\EventListener',
],
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
\SocialiteProviders\OIDC\OIDCExtendSocialite::class.'@handle',
],
];
/**
@@ -0,0 +1,100 @@
<?php
namespace App\Providers\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use Filament\Support\Facades\FilamentView;
use Illuminate\Support\Facades\Blade;
use Filament\Navigation\MenuItem;
use Filament\Facades\Filament;
class AdminPanelProvider extends PanelProvider
{
public function boot()
{
FilamentView::registerRenderHook(
'panels::auth.login.form.after',
fn (): string => Blade::render('
<div class="mt-4">
<x-filament::button
:href="url(\'auth/social/oidc\')"
tag="a"
color="info"
class="w-full"
>
Login with OIDC
</x-filament::button>
</div>
'),
);
Filament::registerUserMenuItems([
MenuItem::make()
->label('Link OIDC Account')
->icon('heroicon-o-link')
->url(fn (): string => url('auth/social/oidc')),
]);
}
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
->path('admin')
->login()
->profile()
->userMenuItems([
'oidc' => MenuItem::make()
->label('Link OIDC Account')
->icon('heroicon-o-link')
->url(fn (): string => url('auth/social/oidc')),
])
->brandName(env('APP_NAME'))
->homeUrl('/')
->colors([
'primary' => Color::Amber,
])
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->pages([
Pages\Dashboard::class,
])
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
->widgets([
Widgets\AccountWidget::class,
Widgets\FilamentInfoWidget::class,
])
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
]);
}
}
+86
View File
@@ -0,0 +1,86 @@
<?php
namespace App\Services;
use Dompdf\Dompdf;
use Dompdf\Options;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Log;
class PrinterService
{
/**
* Print the pickup slip for a given Checkout model.
*
* @param \App\Models\Checkout $checkout
* @return void
*/
public function printForCheckout(\App\Models\Checkout $checkout)
{
$bidder_num = $checkout->bidder_num;
$checkout_list_results = \Illuminate\Support\Facades\DB::select("SELECT
*, items.item_assigned_num, items.item_desc
FROM winning_bids
INNER JOIN items AS items
ON winning_bids.winning_item_num=items.iditems
WHERE winning_bidder_num = $bidder_num
");
$checkout_info_results = \Illuminate\Support\Facades\DB::select("SELECT
winning_bids.*,
bidders.*,
sum(winning_cost) AS total_cost
FROM winning_bids
INNER JOIN bidders AS bidders
ON winning_bids.winning_bidder_num=bidders.idbidders
WHERE winning_bidder_num = $bidder_num
GROUP BY winning_bids.winning_bidder_num
");
$this->printPickupSlip([
'checkout_final_results' => $checkout,
'checkout_list_results' => $checkout_list_results,
'checkout_info_results' => $checkout_info_results
]);
}
/**
* Print the pickup slip by sending it to the HP ePrint email address.
*
* @param array $checkoutData
* @return void
*/
public function printPickupSlip($checkoutData)
{
if (!config('services.printer.enabled')) {
Log::info('Auto-print is disabled.');
return;
}
$printerEmail = config('services.printer.email');
if (empty($printerEmail)) {
Log::error('Printer email is not configured.');
return;
}
try {
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);
$html = view('receiptpdf', $checkoutData)->render();
$dompdf->loadHtml($html);
$dompdf->setPaper('letter', 'portrait');
$dompdf->render();
$pdfOutput = $dompdf->output();
Mail::to($printerEmail)->send(new \App\Mail\PickupSlipMail($pdfOutput));
Log::info('Pickup slip sent to printer: ' . $printerEmail);
} catch (\Exception $e) {
Log::error('Failed to print pickup slip: ' . $e->getMessage());
}
}
}
+19 -3
View File
@@ -6,8 +6,9 @@ use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasName;
use Filament\Panel;
class User extends Authenticatable implements FilamentUser,HasName
class User extends Authenticatable implements FilamentUser, HasName
{
use Notifiable;
@@ -17,7 +18,7 @@ class User extends Authenticatable implements FilamentUser,HasName
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
'name', 'email', 'password', 'provider_name', 'provider_id',
];
/**
@@ -28,10 +29,25 @@ class User extends Authenticatable implements FilamentUser,HasName
protected $hidden = [
'password', 'remember_token',
];
public function canAccessFilament(): bool
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
public function canAccessPanel(Panel $panel): bool
{
return str_ends_with($this->email, '@tfmm.co');
}
public function getFilamentName(): string
{
return "{$this->name}";
+75 -65
View File
@@ -1,68 +1,78 @@
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=7.0.0",
"barryvdh/laravel-snappy": "^1.0",
"carlos-meneses/laravel-mpdf": "^2.1",
"filament/filament": "^2.0",
"laravel/framework": "^9.0",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.7",
"filp/whoops": "~2.0",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "^9.0"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": "^8.3",
"barryvdh/laravel-snappy": "^1.0",
"carlos-meneses/laravel-mpdf": "^2.1",
"dompdf/dompdf": "^3.1",
"filament/filament": "^5.0",
"kovah/laravel-socialite-oidc": "^0.7.0",
"laravel/framework": "^12.0",
"laravel/socialite": "^5.26",
"laravel/tinker": "^2.9",
"laravel/ui": "^4.2",
"socialiteproviders/manager": "^4.9",
"spatie/laravel-pdf": "^2.8",
"takielias/tablar": "^13.02"
},
"files": [
"app/Helpers/BidderSelectList.php",
"app/Helpers/CheckoutBidderSelectList.php",
"app/Helpers/ItemSelectList.php",
"app/Helpers/PaymentMethodSelectList.php",
"app/Helpers/WinningBidderSelectList.php",
"app/Helpers/WinningBidSelectList.php"
]
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"@php artisan filament:upgrade"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
"require-dev": {
"barryvdh/laravel-debugbar": "^3.8",
"filament/upgrade": "^5.0",
"filp/whoops": "^2.14",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.1",
"phpunit/phpunit": "^11.0"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Helpers/BidderSelectList.php",
"app/Helpers/CheckoutBidderSelectList.php",
"app/Helpers/ItemSelectList.php",
"app/Helpers/PaymentMethodSelectList.php",
"app/Helpers/WinningBidderSelectList.php",
"app/Helpers/WinningBidSelectList.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"@php artisan filament:upgrade"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover",
"@php artisan filament:upgrade"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"minimum-stability": "dev",
"prefer-stable": true
}
Generated
+5712 -1988
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -175,7 +175,8 @@ return [
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
App\Providers\RouteServiceProvider::class,
],
+18
View File
@@ -35,4 +35,22 @@ return [
'secret' => env('STRIPE_SECRET'),
],
'oidc' => [
'base_url' => env('OIDC_BASE_URL'),
'client_id' => env('OIDC_CLIENT_ID'),
'client_secret' => env('OIDC_CLIENT_SECRET'),
'redirect' => env('OIDC_REDIRECT_URI'),
],
'north' => [
'checkout_id' => env('NORTH_CHECKOUT_ID'),
'profile_id' => env('NORTH_PROFILE_ID'),
'private_api_key' => env('NORTH_PRIVATE_API_KEY'),
],
'printer' => [
'enabled' => env('AUTO_PRINT_ENABLED', false),
'email' => env('PRINTER_EMAIL'),
],
];
+145
View File
@@ -0,0 +1,145 @@
<?php
return [
'title' => 'Silent Auction Dashboard',
'logo' => '/assets/tablar-logo.png',
'menu' => [
[
'text' => 'Home',
'route' => 'home',
'icon' => 'ti ti-home',
],
[
'text' => 'Bidders',
'icon' => 'ti ti-users',
'submenu' => [
[
'text' => 'Add Bidder',
'route' => 'bidders',
],
[
'text' => 'List Bidders',
'route' => 'bidderlist',
],
],
],
[
'text' => 'Items',
'icon' => 'ti ti-box',
'submenu' => [
[
'text' => 'Add Item',
'route' => 'items',
],
[
'text' => 'List Items',
'route' => 'itemlist',
],
],
],
[
'text' => 'Winners',
'icon' => 'ti ti-trophy',
'submenu' => [
[
'text' => 'Add Winner',
'route' => 'winners',
],
[
'text' => 'Edit Winner',
'route' => 'editwinners',
],
[
'text' => 'List Winners',
'route' => 'winnerlist',
],
[
'text' => 'Winners by Item',
'route' => 'winnersbyitem',
],
[
'text' => 'Check My Winnings',
'route' => 'mywinnings',
],
],
],
[
'text' => 'CarShow',
'icon' => 'ti ti-car',
'submenu' => [
[
'text' => 'Add Car',
'route' => 'showcars',
],
[
'text' => 'List Show Cars',
'route' => 'showcarlist',
],
[
'text' => 'Judging Entry',
'route' => 'judgingentry',
],
[
'text' => 'People\'s Choice Entry',
'route' => 'pcentry',
],
[
'text' => 'Add Judge',
'route' => 'judges',
],
[
'text' => 'Car Show Winners',
'route' => 'showwinners',
],
[
'text' => 'Vehicle Total Scores',
'route' => 'showscores',
],
[
'text' => 'Scores by Car',
'route' => 'showscoresbycar',
],
[
'text' => 'Tabulate Winners',
'route' => 'tabulateshowwinners',
],
],
],
[
'text' => 'Reports',
'icon' => 'ti ti-file-text',
'submenu' => [
[
'text' => 'Bidder List',
'route' => 'bidderlist',
],
[
'text' => 'Completed Checkouts',
'route' => 'checkout_complete_list',
],
[
'text' => 'Items',
'route' => 'itemlist',
],
[
'text' => 'Winners',
'route' => 'winnerlist',
],
],
],
[
'text' => 'Checkout',
'icon' => 'ti ti-credit-card',
'submenu' => [
[
'text' => 'Checkout Bidder',
'route' => 'checkout',
],
[
'text' => 'Re-Print Receipt',
'route' => 'reprint_receipt',
],
],
],
],
];
+125 -8
View File
@@ -23,14 +23,131 @@ $factory->define(App\User::class, function (Faker\Generator $faker) {
];
});
//Bidder
$factory->define(App\Models\Bidder::class, function (Faker\Generator $faker) {
static $password;
// Bidders
$factory->define(App\Models\Bidders::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => str_random(10),
'bidder_fname' => $faker->firstName,
'bidder_lname' => $faker->lastName,
'bidder_addr' => $faker->streetAddress,
'bidder_city' => $faker->city,
'bidder_state' => $faker->stateAbbr,
'bidder_zip' => $faker->postcode,
'bidder_phone' => $faker->phoneNumber,
'bidder_email' => $faker->unique()->safeEmail,
'bidder_assigned_number' => $faker->unique()->numberBetween(1, 1000),
];
});
// Items
$factory->define(App\Models\Items::class, function (Faker\Generator $faker) {
return [
'item_desc' => $faker->sentence(3),
'item_min_bid' => $faker->numberBetween(10, 100),
'item_est_value' => $faker->numberBetween(50, 500),
'item_assigned_num' => $faker->unique()->numberBetween(1, 500),
];
});
// CarShowCategory
$factory->define(App\Models\CarShowCategory::class, function (Faker\Generator $faker) {
return [
'category_name' => $faker->words(2, true),
'vehicle_type' => $faker->boolean,
];
});
// Vehicles
$factory->define(App\Models\Vehicles::class, function (Faker\Generator $faker) {
return [
'year' => $faker->year,
'make' => $faker->company,
'model' => $faker->word,
'type' => function () {
return factory(App\Models\CarShowCategory::class)->create()->id;
},
'doNotJudge' => $faker->boolean,
'owner' => function () {
return factory(App\Models\Bidders::class)->create()->bidder_assigned_number;
},
];
});
// PaymentMethods
$factory->define(App\Models\PaymentMethods::class, function (Faker\Generator $faker) {
return [
'pm_name' => $faker->randomElement(['Cash', 'Check', 'Credit Card']),
];
});
// Judges
$factory->define(App\Models\Judges::class, function (Faker\Generator $faker) {
return [
'judge_number' => $faker->unique()->numberBetween(1, 50),
];
});
// VehicleScores
$factory->define(App\Models\VehicleScores::class, function (Faker\Generator $faker) {
return [
'judge' => function () {
return factory(App\Models\Judges::class)->create()->id;
},
'overall_score' => $faker->numberBetween(1, 100),
'vehicle' => function () {
return factory(App\Models\Vehicles::class)->create()->id;
},
];
});
// PeoplesChoice
$factory->define(App\Models\PeoplesChoice::class, function (Faker\Generator $faker) {
return [
'vehicle' => function () {
return factory(App\Models\Vehicles::class)->create()->id;
},
'pc_count' => $faker->numberBetween(0, 50),
];
});
// WinningBids
$factory->define(App\Models\WinningBids::class, function (Faker\Generator $faker) {
return [
'winning_bidder_num' => function () {
return factory(App\Models\Bidders::class)->create()->idbidders;
},
'winning_cost' => $faker->numberBetween(10, 1000),
'winning_item_num' => function () {
return factory(App\Models\Items::class)->create()->iditems;
},
];
});
// Checkout
$factory->define(App\Models\Checkout::class, function (Faker\Generator $faker) {
return [
'bidder_num' => function () {
return factory(App\Models\Bidders::class)->create()->idbidders;
},
'winnertotal' => $faker->numberBetween(10, 2000),
'payment_method' => function () {
return factory(App\Models\PaymentMethods::class)->create()->pm_id;
},
'check_number' => $faker->optional()->numberBetween(100, 999),
'cc_transaction' => $faker->optional()->uuid,
'cc_amount' => $faker->optional()->numberBetween(10, 2000),
];
});
// CarShowWinner
$factory->define(App\Models\CarShowWinner::class, function (Faker\Generator $faker) {
return [
'vehicle' => function () {
return factory(App\Models\Vehicles::class)->create()->id;
},
'category' => function () {
return factory(App\Models\CarShowCategory::class)->create()->id;
},
'place' => $faker->numberBetween(1, 3),
'total_score' => $faker->numberBetween(50, 300),
];
});
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up():
void {
Schema::table('car_show_winners', function (Blueprint $table) {
$table->integer('total_score')->after('vehicle');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down():
void {
Schema::table('car_show_winners', function (Blueprint $table) {
$table->dropColumn('total_score');
});
}
};

Some files were not shown because too many files have changed in this diff Show More