diff --git a/app/Livewire/RoleForm.php b/app/Livewire/Admin/RoleForm.php
similarity index 98%
rename from app/Livewire/RoleForm.php
rename to app/Livewire/Admin/RoleForm.php
index 3a48dc3..43c5649 100644
--- a/app/Livewire/RoleForm.php
+++ b/app/Livewire/Admin/RoleForm.php
@@ -1,6 +1,6 @@
Role::with('permissions')->orderBy('name')->get(),
'permissions' => Permission::orderBy('name')->get(),
]);
diff --git a/app/Livewire/RoleTable.php b/app/Livewire/Admin/RoleTable.php
similarity index 99%
rename from app/Livewire/RoleTable.php
rename to app/Livewire/Admin/RoleTable.php
index f2f595d..7e1e443 100644
--- a/app/Livewire/RoleTable.php
+++ b/app/Livewire/Admin/RoleTable.php
@@ -1,6 +1,6 @@
class_basename($this->entity) . ': ' . ($this->entity->name ?? $this->entity->id),
'images' => $this->mediaItems->filter(fn($m) => $m->is_image),
'documents' => $this->mediaItems->filter(fn($m) => !$m->is_image),
diff --git a/app/Livewire/PhaseGantt.php b/app/Livewire/Phases/PhaseGantt.php
similarity index 99%
rename from app/Livewire/PhaseGantt.php
rename to app/Livewire/Phases/PhaseGantt.php
index 2862b03..5580d60 100644
--- a/app/Livewire/PhaseGantt.php
+++ b/app/Livewire/Phases/PhaseGantt.php
@@ -1,5 +1,5 @@
ProjectCompaniesTable::ROLES,
]);
}
diff --git a/app/Livewire/ProjectCompaniesTable.php b/app/Livewire/Projects/ProjectCompaniesTable.php
similarity index 99%
rename from app/Livewire/ProjectCompaniesTable.php
rename to app/Livewire/Projects/ProjectCompaniesTable.php
index bf1ad8d..716320f 100644
--- a/app/Livewire/ProjectCompaniesTable.php
+++ b/app/Livewire/Projects/ProjectCompaniesTable.php
@@ -1,6 +1,6 @@
ProjectUsersTable::ROLES,
]);
}
diff --git a/app/Livewire/ProjectUsersTable.php b/app/Livewire/Projects/ProjectUsersTable.php
similarity index 99%
rename from app/Livewire/ProjectUsersTable.php
rename to app/Livewire/Projects/ProjectUsersTable.php
index c7feb36..37f6def 100644
--- a/app/Livewire/ProjectUsersTable.php
+++ b/app/Livewire/Projects/ProjectUsersTable.php
@@ -1,6 +1,6 @@
$grouped,
'directPerms' => $this->user->getDirectPermissions()->pluck('name')->toArray(),
'rolePerms' => $this->user->getPermissionsViaRoles()->pluck('name')->toArray(),
diff --git a/resources/views/admin/roles.blade.php b/resources/views/admin/roles.blade.php
index 19fe7cc..6b520c6 100644
--- a/resources/views/admin/roles.blade.php
+++ b/resources/views/admin/roles.blade.php
@@ -18,7 +18,7 @@
diff --git a/resources/views/admin/users.blade.php b/resources/views/admin/users.blade.php
index c9ac290..9301597 100644
--- a/resources/views/admin/users.blade.php
+++ b/resources/views/admin/users.blade.php
@@ -20,7 +20,7 @@
diff --git a/resources/views/layouts/client.blade.php b/resources/views/layouts/client.blade.php
index c2f9be2..f1e2dba 100644
--- a/resources/views/layouts/client.blade.php
+++ b/resources/views/layouts/client.blade.php
@@ -84,7 +84,7 @@
- @livewire('language-switcher')
+ @livewire('common.language-switcher')
diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php
index ff92e42..68d23bc 100644
--- a/resources/views/layouts/guest.blade.php
+++ b/resources/views/layouts/guest.blade.php
@@ -17,7 +17,7 @@
- @livewire('language-switcher')
+ @livewire('common.language-switcher')
-
+
diff --git a/resources/views/livewire/company-view.blade.php b/resources/views/livewire/companies/company-view.blade.php
similarity index 100%
rename from resources/views/livewire/company-view.blade.php
rename to resources/views/livewire/companies/company-view.blade.php
diff --git a/resources/views/livewire/template-manager.blade.php b/resources/views/livewire/inspections/template-manager.blade.php
similarity index 100%
rename from resources/views/livewire/template-manager.blade.php
rename to resources/views/livewire/inspections/template-manager.blade.php
diff --git a/resources/views/livewire/issues/issue-manager.blade.php b/resources/views/livewire/issues/issue-manager.blade.php
index 2897668..fae76df 100644
--- a/resources/views/livewire/issues/issue-manager.blade.php
+++ b/resources/views/livewire/issues/issue-manager.blade.php
@@ -60,5 +60,5 @@
{{-- ================================================================
ISSUES TABLE (Rappasoft)
================================================================ --}}
-
+
diff --git a/resources/views/livewire/layout/navigation.blade.php b/resources/views/livewire/layout/navigation.blade.php
index 3071626..ff34331 100644
--- a/resources/views/livewire/layout/navigation.blade.php
+++ b/resources/views/livewire/layout/navigation.blade.php
@@ -60,12 +60,12 @@ new class extends Component
- @livewire('language-switcher')
+ @livewire('common.language-switcher')
- @livewire('notification-bell')
+ @livewire('common.notification-bell')
@@ -127,7 +127,7 @@ new class extends Component
- @livewire('language-switcher')
+ @livewire('common.language-switcher')
{{ __('Profile') }}
diff --git a/resources/views/livewire/media-manager.blade.php b/resources/views/livewire/media/media-manager.blade.php
similarity index 100%
rename from resources/views/livewire/media-manager.blade.php
rename to resources/views/livewire/media/media-manager.blade.php
diff --git a/resources/views/livewire/phase-list.blade.php b/resources/views/livewire/phases/phase-list.blade.php
similarity index 98%
rename from resources/views/livewire/phase-list.blade.php
rename to resources/views/livewire/phases/phase-list.blade.php
index cff490b..76e0c4c 100644
--- a/resources/views/livewire/phase-list.blade.php
+++ b/resources/views/livewire/phases/phase-list.blade.php
@@ -12,7 +12,7 @@
{{-- Tabla Rappasoft de fases --}}
-
+
{{-- ================================================================
MODAL crear / editar fase
diff --git a/resources/views/livewire/phase-progress.blade.php b/resources/views/livewire/phases/phase-progress.blade.php
similarity index 100%
rename from resources/views/livewire/phase-progress.blade.php
rename to resources/views/livewire/phases/phase-progress.blade.php
diff --git a/resources/views/livewire/project-companies.blade.php b/resources/views/livewire/projects/project-companies.blade.php
similarity index 91%
rename from resources/views/livewire/project-companies.blade.php
rename to resources/views/livewire/projects/project-companies.blade.php
index 45fe938..131a3bf 100644
--- a/resources/views/livewire/project-companies.blade.php
+++ b/resources/views/livewire/projects/project-companies.blade.php
@@ -25,5 +25,5 @@
@endcan
{{-- Tabla Rappasoft de empresas asignadas --}}
-
+
diff --git a/resources/views/livewire/projects/project-form.blade.php b/resources/views/livewire/projects/project-form.blade.php
index 3c06c25..7bba82b 100644
--- a/resources/views/livewire/projects/project-form.blade.php
+++ b/resources/views/livewire/projects/project-form.blade.php
@@ -21,13 +21,13 @@
@include('livewire.projects.partials.project-data-form')
-
+
-
+
-
+
@else
diff --git a/resources/views/livewire/projects/project-map-editor-tab.blade.php b/resources/views/livewire/projects/project-map-editor-tab.blade.php
index 7a7eb2c..aaa21bd 100644
--- a/resources/views/livewire/projects/project-map-editor-tab.blade.php
+++ b/resources/views/livewire/projects/project-map-editor-tab.blade.php
@@ -30,7 +30,7 @@
📎 {{ __("Files of element") }}
- @livewire('media-manager', [
+ @livewire('media.media-manager', [
'mediableType' => 'App\\Models\\Feature',
'mediableId' => $selectedFeature->id,
], key('media-feature-' . $selectedFeature->id))
diff --git a/resources/views/livewire/projects/project-map.blade.php b/resources/views/livewire/projects/project-map.blade.php
index 57e33b9..8e74be5 100644
--- a/resources/views/livewire/projects/project-map.blade.php
+++ b/resources/views/livewire/projects/project-map.blade.php
@@ -181,7 +181,7 @@
{{ __('Files of element') }}
- @livewire('media-manager', [
+ @livewire('media.media-manager', [
'mediableType' => 'App\\Models\\Feature',
'mediableId' => $selectedFeature->id,
], key('media-feature-' . $selectedFeature->id))
@@ -351,7 +351,7 @@
@endif
@elseif($activeTab === 'issues')
- @livewire('issue-manager', ['project' => $project], key('issues-tab-' . $project->id))
+ @livewire('issues.issue-manager', ['project' => $project], key('issues-tab-' . $project->id))
@endif
diff --git a/resources/views/livewire/project-users.blade.php b/resources/views/livewire/projects/project-users.blade.php
similarity index 92%
rename from resources/views/livewire/project-users.blade.php
rename to resources/views/livewire/projects/project-users.blade.php
index 41b1c33..70ef8d2 100644
--- a/resources/views/livewire/project-users.blade.php
+++ b/resources/views/livewire/projects/project-users.blade.php
@@ -25,5 +25,5 @@
@endcan
{{-- Tabla Rappasoft de usuarios asignados --}}
-
+
diff --git a/resources/views/livewire/role-permission-manager.blade.php b/resources/views/livewire/roles/role-permission-manager.blade.php
similarity index 100%
rename from resources/views/livewire/role-permission-manager.blade.php
rename to resources/views/livewire/roles/role-permission-manager.blade.php
diff --git a/resources/views/livewire/admin-users.blade.php b/resources/views/livewire/users/admin-users.blade.php
similarity index 100%
rename from resources/views/livewire/admin-users.blade.php
rename to resources/views/livewire/users/admin-users.blade.php
diff --git a/resources/views/livewire/user-form.blade.php b/resources/views/livewire/users/user-form.blade.php
similarity index 100%
rename from resources/views/livewire/user-form.blade.php
rename to resources/views/livewire/users/user-form.blade.php
diff --git a/resources/views/livewire/user-view.blade.php b/resources/views/livewire/users/user-view.blade.php
similarity index 88%
rename from resources/views/livewire/user-view.blade.php
rename to resources/views/livewire/users/user-view.blade.php
index 6145e31..aac97ec 100644
--- a/resources/views/livewire/user-view.blade.php
+++ b/resources/views/livewire/users/user-view.blade.php
@@ -320,6 +320,90 @@
+ {{-- Validez y estado --}}
+
+
+
+
+ Validez de acceso
+
+
+
+ Estado
+ {{ $statusBadge[1] }}
+
+
+ Válido desde
+
+ {{ $user->valid_from ? $user->valid_from->format('d/m/Y') : '— (sin límite)' }}
+
+
+
+ Válido hasta
+
+ {{ $user->valid_until ? $user->valid_until->format('d/m/Y') : '— (sin límite)' }}
+
+
+
+ Email verificado
+ @if($user->email_verified_at)
+
+
+ {{ $user->email_verified_at->format('d/m/Y') }}
+
+ @else
+
+
+ Pendiente
+
+ @endif
+
+
+
+
+
+ {{-- Empresa --}}
+ @if($user->company)
+
+
+
+
+ Empresa
+
+
+ @if($user->company->logo_path && \Illuminate\Support\Facades\Storage::disk('public')->exists($user->company->logo_path))
+
->url($user->company->logo_path) }})
+ @else
+
+
+
+ @endif
+
+
{{ $user->company->name }}
+ @if($user->company->apodo)
+
{{ $user->company->apodo }}
+ @endif
+ @if($user->company->email)
+
{{ $user->company->email }}
+ @endif
+
+ @php
+ $typeBadge = match($user->company->type) {
+ 'owner' => ['badge-success', 'Promotor'],
+ 'constructor' => ['badge-primary', 'Constructor'],
+ 'subcontractor' => ['badge-secondary','Subcontratista'],
+ 'consultant' => ['badge-info', 'Consultor'],
+ 'supplier' => ['badge-warning', 'Proveedor'],
+ default => ['badge-ghost', 'Otro'],
+ };
+ @endphp
+
{{ $typeBadge[1] }}
+
+
+
+ @endif
+
{{-- Permisos directos del usuario --}}
diff --git a/resources/views/projects/index.blade.php b/resources/views/projects/index.blade.php
index 598abad..d359a62 100644
--- a/resources/views/projects/index.blade.php
+++ b/resources/views/projects/index.blade.php
@@ -22,7 +22,7 @@
@endif
-
+
diff --git a/resources/views/projects/map.blade.php b/resources/views/projects/map.blade.php
index 9bd8c1b..074a148 100644
--- a/resources/views/projects/map.blade.php
+++ b/resources/views/projects/map.blade.php
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/resources/views/projects/media.blade.php b/resources/views/projects/media.blade.php
index e5f2a4b..62050ac 100644
--- a/resources/views/projects/media.blade.php
+++ b/resources/views/projects/media.blade.php
@@ -11,7 +11,7 @@
← {{ __('Back to map') }}
- @livewire('media-manager', [
+ @livewire('media.media-manager', [
'mediableType' => 'App\Models\Project',
'mediableId' => $project->id,
])
diff --git a/routes/web.php b/routes/web.php
index 29a3c46..a5f9a93 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -4,10 +4,10 @@ use App\Http\Controllers\ProfileController;
use App\Livewire\Reports\ReportsDashboard;
use App\Http\Controllers\ProjectController;
use App\Http\Controllers\OfflineSyncController;
-use App\Livewire\ProjectMap;
-use App\Livewire\ProjectList;
-use App\Livewire\PhaseProgress;
-use App\Livewire\PhaseGantt;
+use App\Livewire\Projects\ProjectMap;
+use App\Livewire\Projects\ProjectList;
+use App\Livewire\Phases\PhaseProgress;
+use App\Livewire\Phases\PhaseGantt;
use App\Http\Controllers\ProjectReportController;
use Illuminate\Support\Facades\Route;
@@ -97,8 +97,8 @@ Route::get('/reports/dashboard', ReportsDashboard::class)->name('reports.dashboa
// Gestión de proyectos
// ------------------------------------------------------------
// Create/Edit handled by unified Livewire component
- Route::get('/projects/create', \App\Livewire\ProjectForm::class)->name('projects.create');
- Route::get('/projects/{project}/edit', \App\Livewire\ProjectForm::class)->name('projects.edit');
+ Route::get('/projects/create', \App\Livewire\Projects\ProjectForm::class)->name('projects.create');
+ Route::get('/projects/{project}/edit', \App\Livewire\Projects\ProjectForm::class)->name('projects.edit');
Route::resource('projects', ProjectController::class)->except(['create', 'edit']);
// Ruta personalizada para ver el mapa de un proyecto específico
Route::get('/projects/{project}/map', [ProjectController::class, 'map'])->name('projects.map');
@@ -111,21 +111,21 @@ Route::get('/reports/dashboard', ReportsDashboard::class)->name('reports.dashboa
})->name('projects.templates')->middleware('can:edit projects');
// Rutas para el LayerManager:
- Route::get('/projects/{project}/phases/{phase}/layers/manage', \App\Livewire\LayerManager::class)->name('layers.manage');
+ Route::get('/projects/{project}/phases/{phase}/layers/manage', \App\Livewire\Layers\LayerManager::class)->name('layers.manage');
// Cronograma Gantt y reporte del proyecto
Route::get('/projects/{project}/gantt', PhaseGantt::class)->name('projects.gantt');
Route::get('/projects/{project}/report', [ProjectReportController::class, 'show'])->name('projects.report');
// Issues del proyecto
- Route::get('/projects/{project}/issues', \App\Livewire\IssueManager::class)->name('projects.issues');
- Route::get('/projects/{project}/issues/create', \App\Livewire\IssueForm::class)->name('projects.issues.create');
- Route::get('/projects/{project}/issues/checklists', \App\Livewire\IssueChecklistManager::class)->name('projects.issues.checklists');
- Route::get('/projects/{project}/issues/{issue}', \App\Livewire\IssueDetail::class)->name('projects.issues.show');
- Route::get('/projects/{project}/issues/{issue}/edit', \App\Livewire\IssueForm::class)->name('projects.issues.edit');
+ Route::get('/projects/{project}/issues', \App\Livewire\Issues\IssueManager::class)->name('projects.issues');
+ Route::get('/projects/{project}/issues/create', \App\Livewire\Issues\IssueForm::class)->name('projects.issues.create');
+ Route::get('/projects/{project}/issues/checklists', \App\Livewire\Issues\IssueChecklistManager::class)->name('projects.issues.checklists');
+ Route::get('/projects/{project}/issues/{issue}', \App\Livewire\Issues\IssueDetail::class)->name('projects.issues.show');
+ Route::get('/projects/{project}/issues/{issue}/edit', \App\Livewire\Issues\IssueForm::class)->name('projects.issues.edit');
// Dashboard por proyecto
- Route::get('/projects/{project}/dashboard', \App\Livewire\ProjectDashboard::class)->name('projects.dashboard');
+ Route::get('/projects/{project}/dashboard', \App\Livewire\Projects\ProjectDashboard::class)->name('projects.dashboard');
// Cliente: portal cliente
Route::middleware(['auth', 'role:client'])->prefix('client')->name('client.')->group(function () {
@@ -137,24 +137,24 @@ Route::get('/reports/dashboard', ReportsDashboard::class)->name('reports.dashboa
// Admin: gestión de usuarios y roles (cada ruta protegida por su permiso)
Route::prefix('admin')->name('admin.')->group(function () {
Route::get('/users', function () { return view('admin.users'); })->middleware('can:view users')->name('users');
- Route::get('/users/create', \App\Livewire\UserForm::class)->middleware('can:create users')->name('users.create');
- Route::get('/users/{user}', \App\Livewire\UserView::class)->middleware('can:view users')->name('users.show');
- Route::get('/users/{user}/edit', \App\Livewire\UserForm::class)->middleware('can:edit users')->name('users.edit');
+ Route::get('/users/create', \App\Livewire\Users\UserForm::class)->middleware('can:create users')->name('users.create');
+ Route::get('/users/{user}', \App\Livewire\Users\UserView::class)->middleware('can:view users')->name('users.show');
+ Route::get('/users/{user}/edit', \App\Livewire\Users\UserForm::class)->middleware('can:edit users')->name('users.edit');
Route::get('/roles', function () { return view('admin.roles'); })->middleware('can:manage roles')->name('roles');
- Route::get('/roles/create', \App\Livewire\RoleForm::class)->middleware('can:manage roles')->name('roles.create');
- Route::get('/roles/{role}/edit', \App\Livewire\RoleForm::class)->middleware('can:manage roles')->name('roles.edit');
- Route::get('/roles/{role}', \App\Livewire\RoleView::class)->middleware('can:manage roles')->name('roles.show');
- Route::get('/permissions', \App\Livewire\RolePermissionManager::class)->middleware('can:manage roles')->name('permissions');
+ Route::get('/roles/create', \App\Livewire\Admin\RoleForm::class)->middleware('can:manage roles')->name('roles.create');
+ Route::get('/roles/{role}/edit', \App\Livewire\Admin\RoleForm::class)->middleware('can:manage roles')->name('roles.edit');
+ Route::get('/roles/{role}', \App\Livewire\Admin\RoleView::class)->middleware('can:manage roles')->name('roles.show');
+ Route::get('/permissions', \App\Livewire\Admin\RolePermissionManager::class)->middleware('can:manage roles')->name('permissions');
});
// Gestor de medios
Route::get('/projects/{project}/media', function (\App\Models\Project $project) {
return view('projects.media', compact('project'));
})->name('projects.media');
- Route::get('/companies', \App\Livewire\CompanyManagement::class)->name('companies.manage');
- Route::get('/companies/create', \App\Livewire\CompanyForm::class)->name('companies.create');
- Route::get('/companies/{company}', \App\Livewire\CompanyView::class)->name('companies.show');
- Route::get('/companies/{company}/edit', \App\Livewire\CompanyForm::class)->name('companies.edit');
+ Route::get('/companies', \App\Livewire\Companies\CompanyManagement::class)->name('companies.manage');
+ Route::get('/companies/create', \App\Livewire\Companies\CompanyForm::class)->name('companies.create');
+ Route::get('/companies/{company}', \App\Livewire\Companies\CompanyView::class)->name('companies.show');
+ Route::get('/companies/{company}/edit', \App\Livewire\Companies\CompanyForm::class)->name('companies.edit');
// ------------------------------------------------------------
// Sincronización offline (para trabajadores en campo)
diff --git a/tests/Feature/IssuesEnhancementsTest.php b/tests/Feature/IssuesEnhancementsTest.php
index c20fe42..869a0d6 100644
--- a/tests/Feature/IssuesEnhancementsTest.php
+++ b/tests/Feature/IssuesEnhancementsTest.php
@@ -2,9 +2,9 @@
namespace Tests\Feature;
-use App\Livewire\IssueChecklistManager;
-use App\Livewire\IssueDetail;
-use App\Livewire\IssueForm;
+use App\Livewire\Issues\IssueChecklistManager;
+use App\Livewire\Issues\IssueDetail;
+use App\Livewire\Issues\IssueForm;
use App\Models\Feature;
use App\Models\Issue;
use App\Models\IssueChecklistTemplate;
diff --git a/tests/Feature/IssuesTablePageTest.php b/tests/Feature/IssuesTablePageTest.php
index 6891112..530374f 100644
--- a/tests/Feature/IssuesTablePageTest.php
+++ b/tests/Feature/IssuesTablePageTest.php
@@ -2,8 +2,8 @@
namespace Tests\Feature;
-use App\Livewire\IssueManager;
-use App\Livewire\IssueTable;
+use App\Livewire\Issues\IssueManager;
+use App\Livewire\Issues\IssueTable;
use App\Models\Issue;
use App\Models\Project;
use App\Models\User;
diff --git a/tests/Feature/PhaseManagementTest.php b/tests/Feature/PhaseManagementTest.php
index 28aacda..4cd66ec 100644
--- a/tests/Feature/PhaseManagementTest.php
+++ b/tests/Feature/PhaseManagementTest.php
@@ -2,8 +2,8 @@
namespace Tests\Feature;
-use App\Livewire\PhaseList;
-use App\Livewire\PhaseTable;
+use App\Livewire\Phases\PhaseList;
+use App\Livewire\Phases\PhaseTable;
use App\Models\Phase;
use App\Models\Project;
use App\Models\User;
diff --git a/tests/Feature/ProjectAssignmentsTest.php b/tests/Feature/ProjectAssignmentsTest.php
index 7d2c6c3..ccdc70a 100644
--- a/tests/Feature/ProjectAssignmentsTest.php
+++ b/tests/Feature/ProjectAssignmentsTest.php
@@ -2,10 +2,10 @@
namespace Tests\Feature;
-use App\Livewire\ProjectCompanies;
-use App\Livewire\ProjectCompaniesTable;
-use App\Livewire\ProjectUsers;
-use App\Livewire\ProjectUsersTable;
+use App\Livewire\Projects\ProjectCompanies;
+use App\Livewire\Projects\ProjectCompaniesTable;
+use App\Livewire\Projects\ProjectUsers;
+use App\Livewire\Projects\ProjectUsersTable;
use App\Models\Company;
use App\Models\Project;
use App\Models\User;
diff --git a/tests/Feature/UserLocaleTest.php b/tests/Feature/UserLocaleTest.php
index cfa34f8..efda61f 100644
--- a/tests/Feature/UserLocaleTest.php
+++ b/tests/Feature/UserLocaleTest.php
@@ -2,7 +2,7 @@
namespace Tests\Feature;
-use App\Livewire\UserForm;
+use App\Livewire\Users\UserForm;
use App\Models\Company;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;