ultimatepos/Modules/QualityManagement/Http/Controllers/NcrController.php

107 lines
3.7 KiB
PHP

<?php
namespace Modules\QualityManagement\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\QualityManagement\Models\CapaAction;
use Modules\QualityManagement\Models\NcrReport;
use Modules\QualityManagement\Services\NcrWorkflowService;
use Modules\QualityManagement\Services\QmsIntegrationService;
class NcrController extends Controller
{
public function index(Request $request)
{
if (! auth()->user()->can('qms.ncr.view')) {
abort(403);
}
$business_id = $request->session()->get('user.business_id');
$ncrs = NcrReport::forBusiness($business_id)->with(['reportedBy', 'assignedTo'])->latest('id')->paginate(20);
return view('qualitymanagement::ncr.index', compact('ncrs'));
}
public function create()
{
if (! auth()->user()->can('qms.ncr.create')) {
abort(403);
}
return view('qualitymanagement::ncr.create');
}
public function store(Request $request, NcrWorkflowService $workflow, QmsIntegrationService $integration)
{
if (! auth()->user()->can('qms.ncr.create')) {
abort(403);
}
$business_id = $request->session()->get('user.business_id');
$validated = $request->validate([
'title' => 'required|string|max:255',
'description' => 'nullable|string',
'severity' => 'required|in:minor,major,critical',
'source' => 'required|in:internal,customer,supplier,audit,inspection,production',
'ie_bom_id' => 'nullable|integer',
'maintenance_equipment_id' => 'nullable|integer',
]);
$workflow->createNcr($business_id, $validated, $integration);
return redirect()->action([self::class, 'index'])->with('status', ['success' => 1, 'msg' => __('qualitymanagement::lang.ncr_created')]);
}
public function show($id)
{
if (! auth()->user()->can('qms.ncr.view')) {
abort(403);
}
$business_id = request()->session()->get('user.business_id');
$ncr = NcrReport::forBusiness($business_id)->with('capaActions.owner')->findOrFail($id);
return view('qualitymanagement::ncr.show', compact('ncr'));
}
public function createCapa($id, Request $request, NcrWorkflowService $workflow, QmsIntegrationService $integration)
{
if (! auth()->user()->can('qms.capa.create')) {
abort(403);
}
$business_id = $request->session()->get('user.business_id');
$ncr = NcrReport::forBusiness($business_id)->findOrFail($id);
$validated = $request->validate([
'type' => 'required|in:corrective,preventive',
'title' => 'required|string|max:255',
'root_cause' => 'nullable|string',
'action_plan' => 'nullable|string',
'due_date' => 'nullable|date',
]);
$workflow->escalateToCapa($ncr, $validated, $integration);
return redirect()->back()->with('status', ['success' => 1, 'msg' => __('qualitymanagement::lang.capa_created')]);
}
public function close($id, NcrWorkflowService $workflow)
{
if (! auth()->user()->can('qms.ncr.update')) {
abort(403);
}
$business_id = request()->session()->get('user.business_id');
$ncr = NcrReport::forBusiness($business_id)->findOrFail($id);
try {
$workflow->closeNcr($ncr);
} catch (\RuntimeException $e) {
return redirect()->back()->with('status', ['success' => 0, 'msg' => $e->getMessage()]);
}
return redirect()->back()->with('status', ['success' => 1, 'msg' => __('qualitymanagement::lang.ncr_closed')]);
}
}