107 lines
3.7 KiB
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')]);
|
|
}
|
|
}
|