MafOrderController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\StoreMafOrderRequest;
  4. use App\Models\MafOrder;
  5. use App\Models\MafOrdersView;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. use Illuminate\Validation\ValidationException;
  9. class MafOrderController extends Controller
  10. {
  11. protected array $data = [
  12. 'active' => 'maf_order',
  13. 'title' => 'Заказы МАФ',
  14. 'id' => 'maf_order',
  15. 'header' => [
  16. 'product-image' => 'Картинка',
  17. 'id' => 'ID',
  18. 'order_number' => '№ заказа',
  19. 'status' => 'Статус',
  20. 'user_name' => 'Менеджер',
  21. 'article' => 'Артикул',
  22. 'nomenclature_number' => 'Номер номенклатуры',
  23. 'quantity' => 'Заказано',
  24. 'in_stock' => 'Остаток',
  25. 'created_at' => 'Дата создания',
  26. ],
  27. 'searchFields' => [
  28. 'order_number',
  29. 'nomenclature_number',
  30. 'article',
  31. ],
  32. ];
  33. public function index(Request $request)
  34. {
  35. $model = new MafOrdersView;
  36. session(['gp_maf_order' => $request->all()]);
  37. $nav = $this->resolveNavToken($request);
  38. $this->rememberNavigation($request, $nav);
  39. $this->createDateFilters($model, 'created_at');
  40. $this->createFilters($model, 'user_name');
  41. $this->createRangeFilters($model, 'in_stock');
  42. $q = $model::query();
  43. $this->acceptFilters($q, $request);
  44. $this->acceptSearch($q, $request);
  45. $this->setSortAndOrderBy($model, $request);
  46. $this->applyStableSorting($q);
  47. $this->data['maf_orders'] = $q->paginate($this->data['per_page'])->withQueryString();
  48. $this->data['orderedOrderNumbers'] = MafOrder::query()
  49. ->whereNotNull('order_number')
  50. ->where('order_number', '!=', '')
  51. ->where('status', 'заказан')
  52. ->orderBy('order_number')
  53. ->distinct()
  54. ->pluck('order_number')
  55. ->values();
  56. $this->data['nav'] = $nav;
  57. return view('maf_orders.index', $this->data);
  58. }
  59. public function store(StoreMafOrderRequest $request)
  60. {
  61. MafOrder::query()->create($request->validated() + ['user_id' => $request->user()->id, 'in_stock' => 0]);
  62. return redirect()->route('maf_order.index', session('gp_maf_order'));
  63. }
  64. public function show(Request $request, int $maf_order)
  65. {
  66. $this->data['maf_order'] = MafOrder::query()->withoutGlobalScope(\App\Models\Scopes\YearScope::class)->find($maf_order);
  67. $nav = $this->resolveNavToken($request);
  68. $this->rememberNavigation($request, $nav);
  69. $this->data['nav'] = $nav;
  70. $this->data['back_url'] = $this->navigationBackUrl(
  71. $request,
  72. $nav,
  73. route('maf_order.index', session('gp_maf_order'))
  74. );
  75. return view('maf_orders.edit', $this->data);
  76. }
  77. public function update(StoreMafOrderRequest $request, MafOrder $maf_order)
  78. {
  79. MafOrder::query()->where('id', $maf_order->id)->update($request->validated());
  80. return redirect()->route('maf_order.index', session('gp_maf_order'));
  81. }
  82. public function destroy(MafOrder $maf_order)
  83. {
  84. $maf_order->delete();
  85. return redirect()->route('maf_order.index', session('gp_maf_order'));
  86. }
  87. public function setInStock(MafOrder $maf_order)
  88. {
  89. $maf_order->update(['in_stock' => $maf_order->quantity, 'status' => 'на складе']);
  90. $request = request();
  91. $nav = $this->resolveNavToken($request);
  92. return redirect()->route('maf_order.show', $this->withNav(['maf_order' => $maf_order], $nav));
  93. }
  94. public function setOrderInStock(Request $request)
  95. {
  96. $validated = $request->validate([
  97. 'bulk_order_number' => 'required|string',
  98. ]);
  99. $orderNumber = trim((string) $validated['bulk_order_number']);
  100. $query = MafOrder::query()
  101. ->where('order_number', $orderNumber)
  102. ->where('status', 'заказан');
  103. if (!$query->exists()) {
  104. throw ValidationException::withMessages([
  105. 'bulk_order_number' => 'Заказ со статусом "Заказан" не найден в выбранном году.',
  106. ]);
  107. }
  108. $query->update([
  109. 'in_stock' => DB::raw('quantity'),
  110. 'status' => 'на складе',
  111. ]);
  112. return redirect()->route('maf_order.index', session('gp_maf_order'));
  113. }
  114. }