index.blade.php 5.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. @extends('layouts.app')
  2. @section('content')
  3. <div class="row mb-3 align-items-center">
  4. <div class="col-md-5"><h3 class="mb-0">Склад</h3></div>
  5. <div class="col-md-7">
  6. <form method="GET" action="{{ route('stock.index') }}" class="d-flex flex-wrap gap-2 justify-content-md-end">
  7. <input type="search" name="search" value="{{ $search }}" class="form-control form-control-sm"
  8. style="max-width: 280px" placeholder="Артикул, наименование или вид">
  9. <select name="kind" class="form-select form-select-sm" style="max-width: 210px">
  10. <option value="">Все виды</option>
  11. @foreach($kinds as $kindOption)<option value="{{ $kindOption }}" @selected($kind === $kindOption)>{{ $kindOption }}</option>@endforeach
  12. </select>
  13. <select name="status" class="form-select form-select-sm" style="max-width: 150px">
  14. <option value="">Все статусы</option>
  15. @foreach($statuses as $value => $label)<option value="{{ $value }}" @selected($status === $value)>{{ $label }}</option>@endforeach
  16. </select>
  17. <button class="btn btn-sm btn-outline-primary" type="submit"><i class="bi bi-search"></i> Найти</button>
  18. @if($search !== '' || $kind !== '' || $status !== '')
  19. <a class="btn btn-sm btn-outline-secondary" href="{{ route('stock.index') }}">Сбросить</a>
  20. @endif
  21. </form>
  22. </div>
  23. </div>
  24. <ul class="nav nav-tabs mb-3">
  25. <li class="nav-item"><a class="nav-link active" href="{{ route('stock.index') }}">Наличие</a></li>
  26. @if(hasPermission('stock.orders.view'))
  27. <li class="nav-item"><a class="nav-link" href="{{ route('stock.orders') }}">Заказы</a></li>
  28. @endif
  29. </ul>
  30. <div class="table-responsive">
  31. <table class="table table-sm table-hover table-bordered align-middle">
  32. <thead class="table-light">
  33. <tr>
  34. <th>Картинка</th>
  35. @include('stock.partials.column-header', ['name' => 'article', 'title' => 'Артикул'])
  36. @include('stock.partials.column-header', ['name' => 'calculator_name', 'title' => 'Наименование'])
  37. @include('stock.partials.column-header', ['name' => 'kind', 'title' => 'Характеристики'])
  38. @include('stock.partials.column-header', ['name' => 'unit', 'title' => 'Ед.'])
  39. @include('stock.partials.column-header', ['name' => 'physical_quantity', 'title' => 'На складе', 'class' => 'text-end'])
  40. @include('stock.partials.column-header', ['name' => 'reserved_quantity', 'title' => 'Забронировано', 'class' => 'text-end'])
  41. @include('stock.partials.column-header', ['name' => 'available_stock_quantity', 'title' => 'Остаток', 'class' => 'text-end'])
  42. @include('stock.partials.column-header', ['name' => 'ordered_stock_quantity', 'title' => 'Заказано', 'class' => 'text-end'])
  43. @include('stock.partials.column-header', ['name' => 'latest_order_note', 'title' => 'Примечание'])
  44. </tr>
  45. </thead>
  46. <tbody>
  47. @forelse($items as $item)
  48. @php
  49. $physical = (int) ($item->physical_quantity ?? 0);
  50. $reserved = (int) ($item->reserved_quantity ?? 0);
  51. @endphp
  52. <tr role="button" ondblclick="window.location='{{ route('stock.show', $item) }}'"
  53. title="Двойной клик — открыть карточку">
  54. <td style="width: 72px">
  55. @if($item->imageFile)
  56. <a href="{{ $item->imageFile->link }}" data-toggle="lightbox" data-gallery="stock">
  57. <img src="{{ $item->imageFile->thumbnail_link }}" alt="{{ $item->article }}"
  58. class="img-thumbnail" style="width: 56px; height: 56px; object-fit: contain">
  59. </a>
  60. @else
  61. <span class="text-muted"><i class="bi bi-image"></i></span>
  62. @endif
  63. </td>
  64. <td>{{ $item->article }}</td>
  65. <td>{{ $item->calculator_name }}</td>
  66. <td>
  67. {{ $item->kind }}
  68. @if($item->dimensions)<div class="small text-muted">{{ $item->dimensions }}</div>@endif
  69. </td>
  70. <td>{{ $item->unit }}</td>
  71. <td class="text-end">{{ $physical }}</td>
  72. <td class="text-end">{{ $reserved }}</td>
  73. <td class="text-end fw-semibold">{{ max(0, $physical - $reserved) }}</td>
  74. <td class="text-end">{{ (int) ($item->ordered_stock_quantity ?? 0) }}</td>
  75. <td>{{ $item->latest_order_note }}</td>
  76. </tr>
  77. @empty
  78. <tr><td colspan="10" class="text-center text-muted py-4">Складские позиции не найдены.</td></tr>
  79. @endforelse
  80. </tbody>
  81. </table>
  82. </div>
  83. @include('partials.pagination', ['items' => $items])
  84. @endsection