| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- <?php
- declare(strict_types=1);
- namespace App\Http\Controllers;
- use App\Enums\ProductionOrderNotificationEvent;
- use App\Http\Requests\CreateProductionOrderReclamationRequest;
- use App\Models\ProductionOrder;
- use App\Models\Reclamation;
- use App\Models\ReclamationType;
- use App\Services\NotificationService;
- use Illuminate\Http\RedirectResponse;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\DB;
- class ProductionOrderReclamationController extends Controller
- {
- public function store(
- CreateProductionOrderReclamationRequest $request,
- ProductionOrder $productionOrder,
- NotificationService $notificationService,
- ): RedirectResponse {
- $reclamation = DB::transaction(function () use ($request, $productionOrder): Reclamation {
- $reclamation = $productionOrder->reclamations()->create([
- 'reclamation_type_id' => ReclamationType::idForCode(ReclamationType::CODE_OTHER),
- 'user_id' => $productionOrder->manager_id,
- 'status_id' => Reclamation::STATUS_NEW,
- 'create_date' => Carbon::now(),
- 'finish_date' => Carbon::now()->addDays(30),
- ]);
- $reclamation->productionOrderItems()->attach($request->validated('item_ids'));
- return $reclamation;
- });
- $reclamation->load(['productionOrder', 'status']);
- $notificationService->notifyReclamationCreated($reclamation, $request->user());
- $notificationService->notifyProductionOrderEvent(
- $productionOrder,
- ProductionOrderNotificationEvent::ReclamationAdded,
- $request->user(),
- );
- return redirect()->route('reclamations.show', $this->withNav(
- ['reclamation' => $reclamation],
- $this->resolveNavToken($request),
- ));
- }
- }
|