get(); return response()->json([ 'success' => true, 'data' => $spools ]); } public function createSpool(Request $request): JsonResponse { $request->validate([ 'spool_no' => 'required|string|unique:spools', 'description' => 'nullable|string', 'material' => 'nullable|string', 'diameter' => 'nullable|string', 'thickness' => 'nullable|string', 'length' => 'nullable|string', 'classification' => 'nullable|string' ]); $spool = Spool::create($request->all()); return response()->json([ 'success' => true, 'data' => $spool, 'message' => 'Spool created successfully!' ], 201); } // Elements CRUD public function getElements(): JsonResponse { $elements = Element::orderBy('element_code')->get(); return response()->json([ 'success' => true, 'data' => $elements ]); } public function createElement(Request $request): JsonResponse { $request->validate([ 'element_code' => 'required|string|unique:elements', 'element_name' => 'required|string', 'element_type' => 'required|string', 'material' => 'nullable|string', 'diameter' => 'nullable|string', 'thickness' => 'nullable|string', 'classification' => 'nullable|string', 'weight' => 'nullable|numeric' ]); $element = Element::create($request->all()); return response()->json([ 'success' => true, 'data' => $element, 'message' => 'Element created successfully!' ], 201); } // Joints CRUD public function getJoints(): JsonResponse { $joints = Joint::with(['spool', 'elementFrom', 'elementTo', 'welderAssignments.welder']) ->orderBy('joint_no') ->get(); return response()->json([ 'success' => true, 'data' => $joints ]); } public function createJoint(Request $request): JsonResponse { $request->validate([ 'joint_no' => 'required|string|unique:joints', 'spool_no' => 'required|string|exists:spools,spool_no', 'element_from' => 'nullable|string|exists:elements,element_code', 'element_to' => 'nullable|string|exists:elements,element_code', 'joint_type' => 'nullable|string', 'welding_type' => 'nullable|string', 'classification' => 'nullable|string' ]); $joint = Joint::create($request->all()); return response()->json([ 'success' => true, 'data' => $joint, 'message' => 'Joint created successfully!' ], 201); } // Welders CRUD public function getWelders(): JsonResponse { $welders = Welder::orderBy('welder_name')->get(); return response()->json([ 'success' => true, 'data' => $welders ]); } public function createWelder(Request $request): JsonResponse { $request->validate([ 'welder_code' => 'required|string|unique:welders', 'name' => 'required|string', 'certification' => 'nullable|string', 'specialization' => 'nullable|string' ]); $welder = Welder::create($request->all()); return response()->json([ 'success' => true, 'data' => $welder, 'message' => 'Welder created successfully!' ], 201); } // Welder Assignments public function assignWelder(Request $request): JsonResponse { $request->validate([ 'joint_no' => 'required|string|exists:joints,joint_no', 'welder_code' => 'required|string|exists:welders,welder_code', 'assigned_date' => 'nullable|date' ]); $assignment = WelderAssignment::create($request->all()); return response()->json([ 'success' => true, 'data' => $assignment, 'message' => 'Welder assigned successfully!' ], 201); } // Auto Generate Spool Number public function generateSpoolNumber(): JsonResponse { $lastSpool = Spool::orderBy('id', 'desc')->first(); $nextNumber = $lastSpool ? (int)substr($lastSpool->spool_no, 3) + 1 : 1; $spoolNumber = 'SP-' . str_pad($nextNumber, 3, '0', STR_PAD_LEFT); // Auto-create the spool in database so it persists $spool = Spool::create([ 'spool_no' => $spoolNumber, 'description' => 'Generated from PDF Editor' ]); return response()->json([ 'success' => true, 'data' => ['spool_no' => $spoolNumber, 'id' => $spool->id] ]); } // Auto Generate Joint Number public function generateJointNumber(Request $request): JsonResponse { // Make spool_no optional with nullable validation $validated = $request->validate(['spool_no' => 'nullable|string']); $spoolNo = $validated['spool_no'] ?? 'SP-001'; // Default spool if not provided $lastJoint = Joint::where('spool_no', $spoolNo) ->orderBy('id', 'desc') ->first(); $nextNumber = $lastJoint ? (int)substr($lastJoint->joint_no, 3) + 1 : 1; $jointNumber = 'J-' . str_pad($nextNumber, 3, '0', STR_PAD_LEFT); // Auto-create the joint in database so it persists $joint = Joint::create([ 'joint_no' => $jointNumber, 'spool_no' => $spoolNo, 'joint_type' => 'Auto-generated', 'description' => 'Generated from PDF Editor' ]); return response()->json([ 'success' => true, 'data' => ['joint_no' => $jointNumber, 'id' => $joint->id] ]); } }