mejoras en la gestión de proyectos y documentos: se añaden nuevos campos y validaciones para optimizar la organización y el seguimiento de los mismos.
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled

This commit is contained in:
2025-10-25 11:29:20 +02:00
parent 28c225687a
commit d8ae8c8894
29 changed files with 2054 additions and 856 deletions

View File

@@ -65,14 +65,36 @@
<div class="bg-white py-6">
<table class="w-full mb-8">
<tbody>
<tbody>
<!-- Empresa -->
<tr>
<td class="w-1/4 py-3 pr-4 align-top">
<x-label for="company_id" :value="__('Empresa propietaria del Proyecto')" />
</td>
<td class="py-3">
<select id="company_id" name="company_id"
class="w-[250px] border-b-1 border-gray-300 focus:border-blue-500 focus:outline-none" required>
<option value="">Seleccione una empresa...</option>
@foreach($companies as $company)
<option value="{{ $company->id }}"
{{ old('company_id', $project->company_id ?? '') == $company->id ? 'selected' : '' }}>
{{ $company->name }}
</option>
@endforeach
</select>
@error('company_id')
<p class="mt-2 text-sm text-red-600">{{ $message }}</p>
@enderror
</td>
</tr>
<!-- Referencia -->
<tr>
<td class="w-1/4 py-3 pr-4 align-top">
<x-label for="reference" :value="__('Referencia')" />
</td>
<td class="py-3">
<input type="text" name="reference"
<input type="text" name="reference" id="reference"
value="{{ old('reference', $project->reference ?? '') }}"
class="w-[250px] border-b-1 border-gray-300 focus:border-blue-500 focus:outline-none"
autofocus
@@ -87,13 +109,12 @@
<!-- Nombre -->
<tr>
<td class="w-1/4 py-3 pr-4 align-top">
<x-label for="name" :value="__('Etiqueta')" />
<x-label for="name" :value="__('Nombre')" />
</td>
<td class="py-3">
<input type="text" name="name"
value="{{ old('name', $project->name ?? '') }}"
class="w-[500px] border-b-1 border-gray-300 focus:border-blue-500 focus:outline-none"
autofocus
required>
@error('name')

View File

@@ -25,7 +25,7 @@
<!-- Listado de proyectos -->
<div class="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
@forelse($projects as $project)
<div class="overflow-hidden bg-white rounded-lg shadow">
<div class="overflow-hidden bg-white rounded-lg shadow border-1 hover:shadow-lg transition duration-300">
<!-- Imagen del proyecto -->
@if($project->project_image_path)
<img src="{{ asset('storage/' . $project->project_image_path) }}"
@@ -33,7 +33,7 @@
class="object-cover w-full h-48 border-b">
@endif
<div class="p-6">
<div class="p-4">
<div class="flex items-start justify-between">
<div class="flex-1">
<h3 class="text-lg font-semibold text-gray-900">
@@ -42,10 +42,15 @@
{{ $project->name }}
</a>
</h3>
<a href="{{ route('projects.show', $project) }}"
class="hover:text-blue-600 hover:underline">
{{ $project->reference }}
</a>
<p class="mt-2 text-sm text-gray-500">
{{ Str::limit($project->description, 100) }}
{{ Str::limit(strip_tags($project->description), 200) }}
</p>
</div>
<x-dropdown align="right" width="48">
<x-slot name="trigger">
<button class="p-1 text-gray-400 hover:text-gray-600">
@@ -83,17 +88,14 @@
<div class="mt-4">
<div class="flex items-center justify-between mt-3 text-sm">
<span class="flex items-center text-gray-500">
<x-icons icon="document" class="w-4 h-4 mr-1" />
<flux:icon.document class="w-4 h-4 mr-1 inline" />
{{ $project->documents_count }} documentos
</span>
<span class="px-2 py-1 text-sm rounded-full
{{ $project->status === 'active' ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-800' }}">
{{ __(Str::ucfirst($project->status)) }}
</span>
<flux:badge variant="solid" color="{{ $project->status === 'Activo' ? 'emerald' : 'red'}}">{{ __(Str::ucfirst($project->status)) }}</flux:badge>
</div>
<div class="mt-2 text-sm text-gray-500">
<x-icons icon="calendar" class="w-4 h-4 mr-1 inline" />
<flux:icon.calendar class="w-4 h-4 mr-1 inline" />
Creado {{ $project->created_at->diffForHumans() }}
</div>
</div>
@@ -111,28 +113,7 @@
<!-- Sidebar menu -->
@push('sidebar-menu')
<flux:navlist variant="outline">
<!-- Sección de Usuarios -->
<flux:navlist.group :heading="__('User')">
<flux:navlist.item
icon="users"
:href="route('users.index')"
wire:navigate
>
{{ __('List Users') }}
</flux:navlist.item>
<flux:navlist.item
icon="user-plus"
:href="route('users.create')"
wire:navigate
>
{{ __('Create User') }}
</flux:navlist.item>
</flux:navlist.group>
<flux:separator />
<flux:navlist variant="outline">
<!-- Sección de Proyectos -->
<flux:navlist.group :heading="__('Projects')">
<flux:navlist.item