SparePartOrderObserver.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace App\Observers;
  3. use App\Models\SparePartOrder;
  4. use App\Services\ShortageService;
  5. /**
  6. * Observer для автоматической обработки дефицитов при изменении статуса партии.
  7. *
  8. * Согласно спецификации п.5: "При создании PartOrder система ищет открытые Shortage
  9. * по part_id + with_documents и резервирует под них."
  10. */
  11. class SparePartOrderObserver
  12. {
  13. public function __construct(
  14. private readonly ShortageService $shortageService
  15. ) {}
  16. /**
  17. * При обновлении партии — проверяем смену статуса на in_stock
  18. */
  19. public function updated(SparePartOrder $order): void
  20. {
  21. // Проверяем, изменился ли статус на in_stock
  22. if ($order->wasChanged('status') &&
  23. $order->status === SparePartOrder::STATUS_IN_STOCK) {
  24. $this->shortageService->processPartOrderReceipt($order);
  25. }
  26. }
  27. /**
  28. * При создании партии со статусом in_stock — сразу обрабатываем дефициты
  29. */
  30. public function created(SparePartOrder $order): void
  31. {
  32. if ($order->status === SparePartOrder::STATUS_IN_STOCK) {
  33. $this->shortageService->processPartOrderReceipt($order);
  34. }
  35. }
  36. }