選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

58 行
1.6KB

  1. <?php
  2. namespace App\Http\Controllers\Items;
  3. use App\Models\Item;
  4. use App\Models\Location;
  5. use App\Models\Stock;
  6. use App\Models\StockMovement;
  7. use Framework\Routing\Router;
  8. class ReceiveStockController
  9. {
  10. public function handle(Router $router)
  11. {
  12. if (!session()->has('user_id')) {
  13. return redirect($router->route('show-register-form'));
  14. }
  15. secure();
  16. $parameters = $router->current()->parameters();
  17. $item = Item::find((int) $parameters['item']);
  18. if (!$item) {
  19. return redirect($router->route('show-items'));
  20. }
  21. $data = validate($_POST, [
  22. 'location_id' => ['required'],
  23. 'quantity' => ['required', 'positive_integer'],
  24. 'notes' => [],
  25. ], 'receive_errors');
  26. $location = Location::find((int) $data['location_id']);
  27. if (!$location) {
  28. return redirect($router->route('show-receive-stock-form', ['item' => $item->id]));
  29. }
  30. $stock = Stock::forItemAtLocation($item->id, $location->id);
  31. $stock->quantity = $stock->quantity + (int) $data['quantity'];
  32. $stock->save();
  33. $movement = new StockMovement();
  34. $movement->item_id = $item->id;
  35. $movement->location_id = $location->id;
  36. $movement->type = 'receive';
  37. $movement->quantity_change = (int) $data['quantity'];
  38. $movement->quantity_after = $stock->quantity;
  39. $movement->notes = $data['notes'] ?? '';
  40. $movement->user_id = session('user_id');
  41. $movement->save();
  42. return redirect($router->route('view-item', ['item' => $item->id]));
  43. }
  44. }

Powered by TurnKey Linux.