edit.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. @extends('layouts.app')
  2. @section('content')
  3. <div class="container-fluid">
  4. <div class="row">
  5. <div class="col-md-6">
  6. <h2>{{ $spare_part_order ? 'Заказ детали #' . $spare_part_order->id : 'Новый заказ детали' }}</h2>
  7. <form action="{{ $spare_part_order ? route('spare_part_orders.update', $spare_part_order) : route('spare_part_orders.store') }}"
  8. method="POST">
  9. @csrf
  10. @if($spare_part_order)
  11. @method('PUT')
  12. @endif
  13. <input type="hidden" name="previous_url" value="{{ $previous_url ?? url()->previous() }}">
  14. @if($spare_part_order && $spare_part_order->sparePart && $spare_part_order->sparePart->image)
  15. <div class="mb-3">
  16. <img src="{{ $spare_part_order->sparePart->image }}" alt="{{ $spare_part_order->sparePart->article }}" class="img-fluid" style="max-width: 150px;">
  17. </div>
  18. @endif
  19. <div class="mb-3">
  20. <label for="spare_part_id" class="form-label">Артикул <span class="text-danger">*</span></label>
  21. <select class="form-select" id="spare_part_id" name="spare_part_id" required {{ $spare_part_order ? 'disabled' : '' }}>
  22. <option value="">Выберите...</option>
  23. @foreach($spare_parts as $sp)
  24. <option value="{{ $sp->id }}"
  25. {{ old('spare_part_id', $spare_part_order->spare_part_id ?? '') == $sp->id ? 'selected' : '' }}>
  26. {{ $sp->article }} - {{ $sp->used_in_maf }}
  27. </option>
  28. @endforeach
  29. </select>
  30. @if($spare_part_order)
  31. <input type="hidden" name="spare_part_id" value="{{ $spare_part_order->spare_part_id }}">
  32. @endif
  33. </div>
  34. <div class="mb-3">
  35. <label for="source_text" class="form-label">Источник заказа</label>
  36. <input type="text" class="form-control" id="source_text" name="source_text"
  37. value="{{ old('source_text', $spare_part_order->source_text ?? '') }}">
  38. </div>
  39. <div class="mb-3">
  40. <label for="status" class="form-label">Статус <span class="text-danger">*</span></label>
  41. <select class="form-select" id="status" name="status" required>
  42. @foreach(\App\Models\SparePartOrder::STATUS_NAMES as $key => $name)
  43. <option value="{{ $key }}"
  44. {{ old('status', $spare_part_order->status ?? '') == $key ? 'selected' : '' }}>
  45. {{ $name }}
  46. </option>
  47. @endforeach
  48. </select>
  49. </div>
  50. <div class="mb-3">
  51. <label for="ordered_quantity" class="form-label">Заказано <span class="text-danger">*</span></label>
  52. <input type="number" class="form-control" id="ordered_quantity" name="ordered_quantity"
  53. value="{{ old('ordered_quantity', $spare_part_order->ordered_quantity ?? '') }}"
  54. min="1" required>
  55. </div>
  56. @if($spare_part_order)
  57. <div class="mb-3">
  58. <label class="form-label">Остаток</label>
  59. <input type="text" class="form-control" value="{{ $spare_part_order->remaining_quantity }}" readonly>
  60. </div>
  61. @endif
  62. <div class="mb-3">
  63. <div class="form-check">
  64. <input class="form-check-input" type="checkbox" id="with_documents" name="with_documents" value="1"
  65. {{ old('with_documents', $spare_part_order->with_documents ?? false) ? 'checked' : '' }}>
  66. <label class="form-check-label" for="with_documents">
  67. С документами
  68. </label>
  69. </div>
  70. </div>
  71. <div class="mb-3">
  72. <label for="note" class="form-label">Примечание</label>
  73. <textarea class="form-control" id="note" name="note" rows="3">{{ old('note', $spare_part_order->note ?? '') }}</textarea>
  74. </div>
  75. <div class="mb-3">
  76. <button type="submit" class="btn btn-success">Сохранить</button>
  77. <a href="{{ $previous_url ?? route('spare_part_orders.index') }}" class="btn btn-secondary">Назад</a>
  78. @if($spare_part_order && $spare_part_order->status === 'ordered' && hasRole('admin,manager'))
  79. <form action="{{ route('spare_part_orders.set_in_stock', $spare_part_order) }}" method="POST" class="d-inline">
  80. @csrf
  81. <button type="submit" class="btn btn-info">Поступило на склад</button>
  82. </form>
  83. @endif
  84. @if($spare_part_order && hasRole('admin'))
  85. <button type="button" class="btn btn-danger float-end" data-bs-toggle="modal" data-bs-target="#deleteModal">
  86. Удалить
  87. </button>
  88. @endif
  89. </div>
  90. </form>
  91. </div>
  92. @if($spare_part_order)
  93. <div class="col-md-6">
  94. <h3>История списаний</h3>
  95. @if($spare_part_order->status === 'in_stock' && $spare_part_order->remaining_quantity > 0 && hasRole('admin,manager'))
  96. <button type="button" class="btn btn-warning mb-3" data-bs-toggle="modal" data-bs-target="#shipModal">
  97. Отгрузить
  98. </button>
  99. @endif
  100. @if($spare_part_order->shipments->count() > 0)
  101. <table class="table table-striped">
  102. <thead>
  103. <tr>
  104. <th>Дата</th>
  105. <th>Количество</th>
  106. <th>Примечание</th>
  107. <th>Пользователь</th>
  108. </tr>
  109. </thead>
  110. <tbody>
  111. @foreach($spare_part_order->shipments as $shipment)
  112. <tr class="{{ $shipment->is_automatic ? 'table-warning' : '' }}">
  113. <td>{{ $shipment->created_at->format('d.m.Y H:i') }}</td>
  114. <td>{{ $shipment->quantity }}</td>
  115. <td>
  116. {{ $shipment->note }}
  117. @if($shipment->reclamation)
  118. <br><small><a href="{{ route('reclamations.show', $shipment->reclamation->id) }}">Рекламация #{{ $shipment->reclamation->id }}</a></small>
  119. @endif
  120. </td>
  121. <td>{{ $shipment->user->name ?? '-' }}</td>
  122. </tr>
  123. @endforeach
  124. </tbody>
  125. </table>
  126. @else
  127. <p class="text-muted">Списаний пока нет</p>
  128. @endif
  129. </div>
  130. @endif
  131. </div>
  132. </div>
  133. @if($spare_part_order && hasRole('admin,manager'))
  134. {{-- Модальное окно отгрузки --}}
  135. <div class="modal fade" id="shipModal" tabindex="-1">
  136. <div class="modal-dialog">
  137. <div class="modal-content">
  138. <form action="{{ route('spare_part_orders.ship', $spare_part_order) }}" method="POST">
  139. @csrf
  140. <div class="modal-header">
  141. <h5 class="modal-title">Отгрузка</h5>
  142. <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
  143. </div>
  144. <div class="modal-body">
  145. <div class="alert alert-info">
  146. Доступно: {{ $spare_part_order->remaining_quantity }} шт.
  147. </div>
  148. <div class="mb-3">
  149. <label for="quantity" class="form-label">Количество <span class="text-danger">*</span></label>
  150. <input type="number" class="form-control" id="quantity" name="quantity"
  151. min="1" max="{{ $spare_part_order->remaining_quantity }}" required>
  152. </div>
  153. <div class="mb-3">
  154. <label for="ship_note" class="form-label">Примечание (куда/для чего) <span class="text-danger">*</span></label>
  155. <textarea class="form-control" id="ship_note" name="note" rows="3" required></textarea>
  156. </div>
  157. </div>
  158. <div class="modal-footer">
  159. <button type="submit" class="btn btn-primary">Отгрузить</button>
  160. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
  161. </div>
  162. </form>
  163. </div>
  164. </div>
  165. </div>
  166. @endif
  167. @if($spare_part_order && hasRole('admin'))
  168. {{-- Модальное окно удаления --}}
  169. <div class="modal fade" id="deleteModal" tabindex="-1">
  170. <div class="modal-dialog">
  171. <div class="modal-content">
  172. <div class="modal-header">
  173. <h5 class="modal-title">Подтверждение удаления</h5>
  174. <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
  175. </div>
  176. <div class="modal-body">
  177. Вы действительно хотите удалить заказ #{{ $spare_part_order->id }}?
  178. </div>
  179. <div class="modal-footer">
  180. <form action="{{ route('spare_part_orders.destroy', $spare_part_order) }}" method="POST">
  181. @csrf
  182. @method('DELETE')
  183. <button type="submit" class="btn btn-danger">Удалить</button>
  184. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
  185. </form>
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. @endif
  191. @endsection