SNYT MY ORDERS UI REVIEW Generated: 2026-07-16 02:16:57 +04 ==================================================================================================== USER MODEL ==================================================================================================== */ use HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var list */ protected $hidden = [ 'password', 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; } public function vanStockImports() { return $this->hasMany(\App\Models\VanStockImport::class); } public function priceImports() { return $this->hasMany(\App\Models\PriceImport::class); } public function isAdmin(): bool { return $this->role === 'admin'; } public function isSalesman(): bool { return $this->role === 'salesman'; } public function areas() { return $this->belongsToMany(\App\Models\Area::class)->withTimestamps(); } } ==================================================================================================== WEB ROUTES ==================================================================================================== name('salesman.public-catalog'); Route::get('/', [PublicPortalController::class, 'index']) ->name('portal.index'); Route::get('/area/{slug}', [PublicPortalController::class, 'area']) ->name('portal.area'); /* |-------------------------------------------------------------------------- | Public Customer Catalog Routes |-------------------------------------------------------------------------- */ Route::post('/catalogs/{catalog}/order-pdf', [CatalogController::class, 'orderPdf']) ->name('catalogs.order-pdf'); Route::get('/catalogs/{catalog}/customer', [CatalogController::class, 'customerView']) ->name('catalogs.customer'); Route::get('/catalog/{token}/customer', [CatalogController::class, 'customerViewByToken']) ->name('catalogs.customer-token'); Route::middleware(['auth'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']) ->name('dashboard'); Route::get('/van-stocks', [VanStockImportController::class, 'index']) ->name('van-stocks.index'); Route::get('/van-stocks/{vanStockImport}', [VanStockImportController::class, 'show']) ->name('van-stocks.show'); Route::get('/van-boxes', [VanBoxController::class, 'index']) ->name('van-boxes.index'); Route::get('/van-boxes/{box}', [VanBoxController::class, 'show']) ->name('van-boxes.show'); Route::get('/catalogs', [CatalogController::class, 'index']) ->name('catalogs.index'); Route::get('/profile', [ProfileController::class, 'edit']) ->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update']) ->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy']) ->name('profile.destroy'); /* |-------------------------------------------------------------------------- | Admin Only Routes |-------------------------------------------------------------------------- */ Route::middleware(['admin'])->group(function () { Route::post('/van-boxes', [VanBoxController::class, 'storeBox']) ->name('van-boxes.store'); Route::post('/van-boxes/{box}/items', [VanBoxController::class, 'addItem']) ->name('van-boxes.items.add'); Route::delete('/van-box-items/{item}', [VanBoxController::class, 'removeItem']) ->name('van-boxes.items.remove'); Route::get('/catalog-center', [CatalogCenterController::class, 'index']) ->name('catalog-center.index'); Route::get('/catalogs/create', [CatalogController::class, 'create']) ->name('catalogs.create'); Route::post('/catalogs', [CatalogController::class, 'store']) ->name('catalogs.store'); Route::delete('/catalogs/bulk-delete', [CatalogController::class, 'bulkDestroy']) ->name('catalogs.bulk-delete'); Route::delete('/catalogs/{catalog}', [CatalogController::class, 'destroy']) ->name('catalogs.destroy'); Route::get('/settings/company', [CompanySettingController::class, 'edit']) ->name('company-settings.edit'); Route::post('/settings/company', [CompanySettingController::class, 'update']) ->name('company-settings.update'); Route::get('/settings/system-tools', [SystemToolController::class, 'index']) ->name('system-tools.index'); Route::post('/settings/system-tools/rebuild-families', [SystemToolController::class, 'rebuildFamilies']) ->name('system-tools.rebuild-families'); Route::post('/settings/system-tools/auto-match-images', [SystemToolController::class, 'autoMatchImages']) ->name('system-tools.auto-match-images'); Route::post('/settings/system-tools/reset-imports', [SystemToolController::class, 'resetImports']) ->name('system-tools.reset-imports'); Route::post('/settings/system-tools/reset-catalogs', [SystemToolController::class, 'resetCatalogs']) ->name('system-tools.reset-catalogs'); Route::post('/settings/system-tools/reset-products', [SystemToolController::class, 'resetProducts']) ->name('system-tools.reset-products'); /* |-------------------------------------------------------------------------- | Areas |-------------------------------------------------------------------------- */ Route::get('/areas', [AreaController::class, 'index']) ->name('areas.index'); Route::get('/areas/create', [AreaController::class, 'create']) ->name('areas.create'); Route::post('/areas', [AreaController::class, 'store']) ->name('areas.store'); Route::get('/areas/{area}/edit', [AreaController::class, 'edit']) ->name('areas.edit'); Route::put('/areas/{area}', [AreaController::class, 'update']) ->name('areas.update'); Route::delete('/areas/{area}', [AreaController::class, 'destroy']) ->name('areas.destroy'); /* |-------------------------------------------------------------------------- | Salesmen Management |-------------------------------------------------------------------------- */ Route::get('/salesmen', [AdminSalesmanController::class, 'index']) ->name('salesmen.index'); Route::get('/salesmen/create', [AdminSalesmanController::class, 'create']) ->name('salesmen.create'); Route::post('/salesmen', [AdminSalesmanController::class, 'store']) ->name('salesmen.store'); /* |-------------------------------------------------------------------------- | Salesman Profile |-------------------------------------------------------------------------- */ Route::get('/salesmen/{user}/profile', [SalesmanProfileController::class, 'edit']) ->name('salesmen.profile.edit'); Route::put('/salesmen/{user}/profile', [SalesmanProfileController::class, 'update']) ->name('salesmen.profile.update'); /* |-------------------------------------------------------------------------- | Van Stocks |-------------------------------------------------------------------------- | IMPORTANT: | Static routes must be before /van-stocks/{vanStockImport} */ Route::get('/van-stocks/admin-upload', [AdminVanStockAssignController::class, 'create']) ->name('van-stocks.admin-upload'); Route::post('/van-stocks/admin-upload', [AdminVanStockAssignController::class, 'store']) ->name('van-stocks.admin-upload.store'); Route::get('/van-stocks/create', [VanStockImportController::class, 'create']) ->name('van-stocks.create'); Route::post('/van-stocks', [VanStockImportController::class, 'store']) ->name('van-stocks.store'); Route::post('/van-stocks/{vanStockImport}/generate-catalog', [VanStockImportController::class, 'generateCatalog']) ->name('van-stocks.generate-catalog'); Route::delete('/van-stocks/{vanStockImport}', [VanStockImportController::class, 'destroy']) ->name('van-stocks.destroy'); /* |-------------------------------------------------------------------------- | Products |-------------------------------------------------------------------------- */ Route::get('/products', [ProductController::class, 'index']) ->name('products.index'); Route::post('/products/{product}/price', [ProductController::class, 'updatePrice']) ->name('products.update-price'); Route::post('/products/{product}/image', [ProductController::class, 'updateImage']) ->name('products.update-image'); Route::post('/products/{product}/gallery', [ProductController::class, 'uploadGalleryImages']) ->name('products.gallery-upload'); Route::post('/products/{product}/gallery/{image}/primary', [ProductController::class, 'setPrimaryImage']) ->name('products.gallery-primary'); Route::delete('/products/{product}/gallery/{image}', [ProductController::class, 'deleteGalleryImage']) ->name('products.gallery-delete'); Route::post('/products/{product}/use-existing-image', [ProductController::class, 'useExistingImage']) ->name('products.use-existing-image'); Route::post('/products/{product}/apply-image-family', [ProductController::class, 'applyImageToFamily']) ->name('products.apply-image-family'); /* |-------------------------------------------------------------------------- | SOH |-------------------------------------------------------------------------- */ Route::get('/soh', [SohImportController::class, 'index']) ->name('soh.index'); Route::post('/soh', [SohImportController::class, 'store']) ->name('soh.store'); Route::post('/soh/import-from-server', [SohImportController::class, 'importFromServer']) ->name('soh.import-from-server'); /* |-------------------------------------------------------------------------- | Price Imports |-------------------------------------------------------------------------- */ Route::get('/price-imports', [PriceImportController::class, 'index']) ->name('price-imports.index'); Route::get('/price-imports/create', [PriceImportController::class, 'create']) ->name('price-imports.create'); Route::post('/price-imports', [PriceImportController::class, 'store']) ->name('price-imports.store'); Route::post('/price-imports/{priceImport}/generate-catalog', [PriceImportController::class, 'generateCatalog']) ->name('price-imports.generate-catalog'); Route::post('/price-imports/{priceImport}/parse', [PriceImportController::class, 'parse']) ->name('price-imports.parse'); Route::get('/price-imports/{priceImport}', [PriceImportController::class, 'show']) ->name('price-imports.show'); /* |-------------------------------------------------------------------------- | Shipments |-------------------------------------------------------------------------- */ Route::get('/shipments', [ShipmentController::class, 'index']) ->name('shipments.index'); Route::get('/shipments/create', [ShipmentController::class, 'create']) ->name('shipments.create'); Route::post('/shipments', [ShipmentController::class, 'store']) ->name('shipments.store'); Route::get('/shipments/{shipment}', [ShipmentController::class, 'show']) ->name('shipments.show'); Route::post('/shipments/{shipment}/generate-pdf', [ShipmentController::class, 'generatePdf']) ->name('shipments.generate-pdf'); }); Route::get('/catalogs/{catalog}/generate-pdf', [CatalogController::class, 'generatePdf']) ->name('catalogs.generate-pdf'); Route::get('/catalogs/{catalog}', [CatalogController::class, 'show']) ->name('catalogs.show'); }); require __DIR__.'/auth.php'; Route::middleware(['auth'])->group(function () { Route::get('/salesman/inventory-check', [SalesmanInventoryCheckController::class, 'index']) ->name('salesman.inventory-check'); ==================================================================================================== AVAILABLE LAYOUT FILES ==================================================================================================== resources/views/layouts/app.blade.php resources/views/layouts/dashboard.blade.php resources/views/layouts/dashboard.blade.php.before-import-center-sidebar resources/views/layouts/dashboard.blade.php.before-modern-sidebar resources/views/layouts/guest.blade.php resources/views/layouts/navigation.blade.php ==================================================================================================== LAYOUT EXTENDS / COMPONENT USAGE ==================================================================================================== resources/views/dashboard/index.blade.php:1:@extends('layouts.dashboard') resources/views/dashboard/salesman.blade.php:1:@extends('layouts.dashboard') resources/views/dashboard.blade.php:1:@extends('layouts.dashboard') resources/views/catalogs/create.blade.php:1:@extends('layouts.dashboard') resources/views/catalogs/index.blade.php:1:@extends('layouts.dashboard') resources/views/catalogs/show.blade.php:1:@extends('layouts.dashboard') resources/views/salesman/inventory-check.blade.php:1:@extends('layouts.dashboard') resources/views/salesman/inventory-report-show.blade.php:1:@extends('layouts.dashboard') resources/views/salesman/inventory-reports.blade.php:1:@extends('layouts.dashboard') ==================================================================================================== SIDEBAR / NAVIGATION LINKS ==================================================================================================== resources/views/layouts/dashboard.blade.php-2- $companySettings = \App\Models\CompanySetting::current(); resources/views/layouts/dashboard.blade.php-3- $user = auth()->user(); resources/views/layouts/dashboard.blade.php-4- resources/views/layouts/dashboard.blade.php-5- $navGroupsAdmin = [ resources/views/layouts/dashboard.blade.php-6- 'Command Center' => [ resources/views/layouts/dashboard.blade.php:7: ['label' => 'Dashboard', 'icon' => '🏠', 'route' => 'dashboard', 'active' => 'dashboard'], resources/views/layouts/dashboard.blade.php:8: ['label' => 'Catalog Center', 'icon' => '🧭', 'route' => 'catalog-center.index', 'active' => 'catalog-center.*'], resources/views/layouts/dashboard.blade.php-9- ['label' => 'Import Center', 'icon' => 'πŸ“₯', 'route' => 'import-center.index', 'active' => 'import-center.*'], resources/views/layouts/dashboard.blade.php-10- ], resources/views/layouts/dashboard.blade.php:11: 'Catalogs' => [ resources/views/layouts/dashboard.blade.php:12: ['label' => 'Catalogs', 'icon' => 'πŸ“š', 'route' => 'catalogs.index', 'active' => 'catalogs.*'], resources/views/layouts/dashboard.blade.php-13- ['label' => 'Price Lists', 'icon' => 'πŸ’°', 'route' => 'price-imports.index', 'active' => 'price-imports.*'], resources/views/layouts/dashboard.blade.php-14- ['label' => 'Shipments', 'icon' => 'πŸ“¦', 'route' => 'shipments.index', 'active' => 'shipments.*'], resources/views/layouts/dashboard.blade.php-15- ['label' => 'Products', 'icon' => 'πŸ›', 'route' => 'products.index', 'active' => 'products.*'], resources/views/layouts/dashboard.blade.php-16- ['label' => 'SOH Library', 'icon' => 'πŸ–Ό', 'route' => 'soh.index', 'active' => 'soh.*'], resources/views/layouts/dashboard.blade.php-17- ], resources/views/layouts/dashboard.blade.php-18- 'Sales Team' => [ resources/views/layouts/dashboard.blade.php-19- ['label' => 'Salesmen / Vans', 'icon' => '🚚', 'route' => 'salesmen.index', 'active' => 'salesmen.*'], resources/views/layouts/dashboard.blade.php:20: ['label' => 'Assign Van Inventory', 'icon' => 'πŸ“€', 'route' => 'van-stocks.admin-upload', 'active' => 'van-stocks.admin-upload'], resources/views/layouts/dashboard.blade.php:21: ['label' => 'Van Stock Imports', 'icon' => 'πŸš›', 'route' => 'van-stocks.index', 'active' => 'van-stocks.index,van-stocks.show,van-stocks.create,van-stocks.generate-catalog'], resources/views/layouts/dashboard.blade.php-22- ['label' => 'Van Box Management', 'icon' => 'πŸ“¦', 'route' => 'van-boxes.index', 'active' => 'van-boxes.*'], resources/views/layouts/dashboard.blade.php:23: ['label' => 'Inventory Reports', 'icon' => 'πŸ“‹', 'route' => 'inventory-checks.index', 'active' => 'inventory-checks.*'], resources/views/layouts/dashboard.blade.php-24- ], resources/views/layouts/dashboard.blade.php-25- 'Locations' => [ resources/views/layouts/dashboard.blade.php-26- ['label' => 'Areas', 'icon' => 'πŸ“', 'route' => 'areas.index', 'active' => 'areas.*'], resources/views/layouts/dashboard.blade.php-27- ], resources/views/layouts/dashboard.blade.php-28- 'Settings' => [ resources/views/layouts/dashboard.blade.php-29- ['label' => 'Company Settings', 'icon' => 'βš™οΈ', 'route' => 'company-settings.edit', 'active' => 'company-settings.*'], resources/views/layouts/dashboard.blade.php-30- ['label' => 'System Tools', 'icon' => '🧰', 'route' => 'system-tools.index', 'active' => 'system-tools.*'], resources/views/layouts/dashboard.blade.php-31- ], resources/views/layouts/dashboard.blade.php-32- ]; resources/views/layouts/dashboard.blade.php-33- resources/views/layouts/dashboard.blade.php:34: $navGroupsSalesman = [ resources/views/layouts/dashboard.blade.php-35- 'My Work' => [ resources/views/layouts/dashboard.blade.php:36: ['label' => 'Dashboard', 'icon' => '🏠', 'route' => 'dashboard', 'active' => 'dashboard'], resources/views/layouts/dashboard.blade.php:37: ['label' => 'My Inventory Check', 'icon' => 'βœ…', 'route' => 'salesman.inventory-check', 'active' => 'salesman.inventory-check*'], resources/views/layouts/dashboard.blade.php:38: ['label' => 'My Van Stock', 'icon' => '🚚', 'route' => 'van-stocks.index', 'active' => 'van-stocks.*'], resources/views/layouts/dashboard.blade.php-39- ['label' => 'My Van Boxes', 'icon' => 'πŸ“¦', 'route' => 'van-boxes.index', 'active' => 'van-boxes.*'], resources/views/layouts/dashboard.blade.php:40: ['label' => 'My Catalogs', 'icon' => 'πŸ“š', 'route' => 'catalogs.index', 'active' => 'catalogs.*'], resources/views/layouts/dashboard.blade.php-41- ], resources/views/layouts/dashboard.blade.php-42- ]; resources/views/layouts/dashboard.blade.php-43- resources/views/layouts/dashboard.blade.php:44: $navGroups = $user->isAdmin() ? $navGroupsAdmin : $navGroupsSalesman; resources/views/layouts/dashboard.blade.php-45-@endphp resources/views/layouts/dashboard.blade.php-46- resources/views/layouts/dashboard.blade.php-47- resources/views/layouts/dashboard.blade.php-48- resources/views/layouts/dashboard.blade.php-49- resources/views/layouts/dashboard.blade.php-50- resources/views/layouts/dashboard.blade.php-51- resources/views/layouts/dashboard.blade.php:52: {{ config('app.name', 'Shipment Catalog') }} resources/views/layouts/dashboard.blade.php-53- @vite(['resources/css/app.css', 'resources/js/app.js']) resources/views/layouts/dashboard.blade.php-54- resources/views/layouts/dashboard.blade.php-55- resources/views/layouts/dashboard.blade.php-56- resources/views/layouts/dashboard.blade.php-57- resources/views/layouts/dashboard.blade.php:58:
resources/views/layouts/dashboard.blade.php:59: resources/views/layouts/dashboard.blade.php-60- resources/views/layouts/dashboard.blade.php:61:
resources/views/layouts/dashboard.blade.php-62- resources/views/layouts/dashboard.blade.php-63-
resources/views/layouts/dashboard.blade.php-64- resources/views/layouts/dashboard.blade.php-142- resources/views/layouts/dashboard.blade.php:143:
resources/views/layouts/dashboard.blade.php:144: resources/views/layouts/dashboard.blade.php-145- resources/views/layouts/dashboard.blade.php-146-
resources/views/layouts/dashboard.blade.php-173-
-- resources/views/layouts/dashboard.blade.php-179- πŸ“₯ Smart Import Center resources/views/layouts/dashboard.blade.php-180- resources/views/layouts/dashboard.blade.php-181- resources/views/layouts/dashboard.blade.php-182- resources/views/layouts/dashboard.blade.php:184: πŸ“€ Assign Van Inventory resources/views/layouts/dashboard.blade.php-185- resources/views/layouts/dashboard.blade.php-186- @else resources/views/layouts/dashboard.blade.php-187- resources/views/layouts/dashboard.blade.php:189: βœ… My Inventory Check resources/views/layouts/dashboard.blade.php-190- resources/views/layouts/dashboard.blade.php-191- @endif resources/views/layouts/dashboard.blade.php-192-
resources/views/layouts/dashboard.blade.php-193- resources/views/layouts/dashboard.blade.php-194-
resources/views/layouts/dashboard.blade.php-195- @foreach($navGroups as $groupName => $items) resources/views/layouts/dashboard.blade.php-196-
resources/views/layouts/dashboard.blade.php-197- {{ $groupName }} resources/views/layouts/dashboard.blade.php-198-
resources/views/layouts/dashboard.blade.php-199- resources/views/layouts/dashboard.blade.php:200:
resources/views/layouts/dashboard.blade.php-230- resources/views/layouts/dashboard.blade.php-231-
resources/views/layouts/dashboard.blade.php-232-
{{ $user->name }}
resources/views/layouts/dashboard.blade.php-233-
resources/views/layouts/dashboard.blade.php:234: {{ $user->isAdmin() ? 'Administrator' : 'Salesman' }} resources/views/layouts/dashboard.blade.php-235-
resources/views/layouts/dashboard.blade.php-236-
resources/views/layouts/dashboard.blade.php-237-
resources/views/layouts/dashboard.blade.php-238- resources/views/layouts/dashboard.blade.php-239-
-- resources/views/layouts/dashboard.blade.php-241- 🌐 Public Portal resources/views/layouts/dashboard.blade.php-242- resources/views/layouts/dashboard.blade.php-243- resources/views/layouts/dashboard.blade.php-244- @if($user->public_catalog_token ?? false) resources/views/layouts/dashboard.blade.php-245- resources/views/layouts/dashboard.blade.php-250- @endif resources/views/layouts/dashboard.blade.php-251-
-- resources/views/layouts/dashboard.blade.php-255- resources/views/layouts/dashboard.blade.php-256- resources/views/layouts/dashboard.blade.php-257- resources/views/layouts/dashboard.blade.php-258- resources/views/layouts/dashboard.blade.php-259-