200 lines
6.3 KiB
PHP
200 lines
6.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Spool;
|
|
use App\Models\Element;
|
|
use App\Models\Joint;
|
|
use App\Models\Welder;
|
|
use App\Models\WelderAssignment;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
class PdfmController extends Controller
|
|
{
|
|
// Spools CRUD
|
|
public function getSpools(): JsonResponse
|
|
{
|
|
$spools = Spool::orderBy('spool_no')->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]
|
|
]);
|
|
}
|
|
} |