ProductionOrderReclamationController.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Http\Controllers;
  4. use App\Enums\ProductionOrderNotificationEvent;
  5. use App\Http\Requests\CreateProductionOrderReclamationRequest;
  6. use App\Models\ProductionOrder;
  7. use App\Models\Reclamation;
  8. use App\Models\ReclamationType;
  9. use App\Services\NotificationService;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Support\Carbon;
  12. use Illuminate\Support\Facades\DB;
  13. class ProductionOrderReclamationController extends Controller
  14. {
  15. public function store(
  16. CreateProductionOrderReclamationRequest $request,
  17. ProductionOrder $productionOrder,
  18. NotificationService $notificationService,
  19. ): RedirectResponse {
  20. $reclamation = DB::transaction(function () use ($request, $productionOrder): Reclamation {
  21. $reclamation = $productionOrder->reclamations()->create([
  22. 'reclamation_type_id' => ReclamationType::idForCode(ReclamationType::CODE_OTHER),
  23. 'user_id' => $productionOrder->manager_id,
  24. 'status_id' => Reclamation::STATUS_NEW,
  25. 'create_date' => Carbon::now(),
  26. 'finish_date' => Carbon::now()->addDays(30),
  27. ]);
  28. $reclamation->productionOrderItems()->attach($request->validated('item_ids'));
  29. return $reclamation;
  30. });
  31. $reclamation->load(['productionOrder', 'status']);
  32. $notificationService->notifyReclamationCreated($reclamation, $request->user());
  33. $notificationService->notifyProductionOrderEvent(
  34. $productionOrder,
  35. ProductionOrderNotificationEvent::ReclamationAdded,
  36. $request->user(),
  37. );
  38. return redirect()->route('reclamations.show', $this->withNav(
  39. ['reclamation' => $reclamation],
  40. $this->resolveNavToken($request),
  41. ));
  42. }
  43. }