Files
citrus-cms/app/Http/Controllers/Api/PdfmController.php
T
2026-04-28 21:14:25 +03:00

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]
]);
}
}