mejoras en la gestión de nombres y códigos de proyectos y documentos según la norma ISO 19650
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled

This commit is contained in:
2025-10-25 11:30:59 +02:00
parent d8ae8c8894
commit 88e526cf6c
13 changed files with 917 additions and 46 deletions

View File

@@ -0,0 +1,47 @@
<?php
namespace App\Helpers;
class ProjectNamingSchema
{
/**
* Generate a project name based on ISO 19650 schema.
*
* @param array $fields Associative array of required and optional fields.
* @return string Generated project name.
*/
public static function generate(array $fields): string
{
// Validate required fields
$requiredFields = ['project', 'creator', 'volume', 'level', 'documentType', 'discipline', 'number'];
foreach ($requiredFields as $field) {
if (empty($fields[$field])) {
throw new \InvalidArgumentException("The field '{$field}' is required.");
}
}
// Build the project name
$projectName = [
strtoupper($fields['project']),
strtoupper($fields['creator']),
strtoupper($fields['volume']),
strtoupper($fields['level']),
strtoupper($fields['documentType']),
strtoupper($fields['discipline']),
str_pad($fields['number'], 3, '0', STR_PAD_LEFT),
];
// Add optional fields if provided
if (!empty($fields['description'])) {
$projectName[] = $fields['description'];
}
if (!empty($fields['status'])) {
$projectName[] = strtoupper($fields['status']);
}
if (!empty($fields['revision'])) {
$projectName[] = str_pad($fields['revision'], 4, '0', STR_PAD_LEFT);
}
return implode('-', $projectName);
}
}

View File

@@ -53,7 +53,7 @@ class ProjectController extends Controller
public function store(Request $request)
{
$validated = $request->validate([
'reference' => 'required|string|max:255',
'reference' => 'required|string|max:12',
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'status' => 'required|in:Activo,Inactivo',

View File

@@ -167,7 +167,7 @@ class ProjectShow extends Component
'file_path' => $file->store("projects/{$this->project->id}/documents"),
'project_id' => $this->project->id, // Asegurar que se envía
'folder_id' => $this->currentFolder?->id,
//'user_id' => Auth::id(),
'user_id' => Auth::id(),
//'status' => 'active' // Añadir si tu modelo lo requiere
]);
}
@@ -242,4 +242,9 @@ class ProjectShow extends Component
{
return view('livewire.project.show');
}
public function generateProjectCode(array $fields): string
{
return \App\Helpers\ProjectNamingSchema::generate($fields);
}
}

View File

@@ -21,7 +21,15 @@ class Document extends Model
'project_id', // Asegurar que está en fillable
'folder_id',
'user_id',
'status'
'status',
'revision',
'version',
'discipline',
'document_type',
'issuer',
'entry_date',
'current_version_id',
'code',
];